Ei, eu sou um novato nessa brincadeira de programação e isso é realmente me frustrando. Estou tentando mover uma cobra em todas as direções enquanto estiver usando aulas. Criei um vetor2 para velocidade e tentei criar um método que mova a cobra dentro da classe da cobra.
Agora estou confuso e não sei o que fazer a seguir.
Aprecio qualquer ajuda. Obrigado: D
Isto é o que eu fiz em termos do método ...
public Vector2 direction()
{
Vector2 inputDirection = Vector2.Zero;
if (Keyboard.GetState().IsKeyDown(Keys.Left)) inputDirection.X -= -1;
if (Keyboard.GetState().IsKeyDown(Keys.Right)) inputDirection.X += 1;
if (Keyboard.GetState().IsKeyDown(Keys.Up)) inputDirection.Y -= -1;
if (Keyboard.GetState().IsKeyDown(Keys.Down)) inputDirection.Y += 1;
return inputDirection * snakeSpeed;
}
Aprecio qualquer ajuda. Obrigado: D
EDIT:
Bem, deixe-me esclarecer tudo. Estou fazendo um pequeno jogo básico para uma tarefa. O jogo é semelhante ao antigo jogo de cobra nos antigos telefones Nokia. Eu criei uma classe de cobra (mesmo que eu não tenha certeza se isso é necessário, porque eu só vou ter um sprite em movimento dentro do jogo). Depois de escrever o código acima (na classe snake), o jogo correu sem erros, mas não consegui mover a imagem :(
EDIT2: Muito obrigado pelas respostas de todos !!
Respostas:
Embora eu também seja um novato no desenvolvimento de jogos, minha aposta é que você esteja sempre reinicializando sua
inputDirection
variávelVector2.Zero
.Eu não sei muito sobre desenvolvimento de jogos, mas quanto à programação orientada a objetos, isso é outra coisa! Aqui está o que eu vim depois de ler o seu comentário sobre as aulas.
Espero que isso ajude, e estar na direção certa para uma solução viável! =)
fonte
Snake
classe que deve estar ciente de sua velocidade e direção. Além disso, este é o jogo que está recebendo as entradas do usuário. Então, no meu entendimento, você tem que fazer o know cobra que direção ele deve ir ao lado, ou seja, eu acredito que você deve ter, dentro de suaSnake
classe, quatro métodos:MoveDown()
,MoveLeft()
,MoveRight()
eMoveUp()
. É a cobra que sabe o que fazer para se mover de um jeito ou de outro e, como também conhece sua velocidade, deve se mover de acordo. Então, em suaGame
classe, instancie sua cobra e insira as instruções através de seus métodos!Snake
classe possível que expõe quatroMove
métodos. A cobra não precisa saber qual tecla foi pressionada; seu jogo deve obter as teclas. Então, é o seu jogo que diz à sua cobra para onde ir, dependendo das teclas que foram pressionadas pelo jogador. Em seguida, seu jogo informa sua_snake
instância para etc.MoveLeft
,MoveDown
dependendo das teclas que você pressionou. Avise-me se isso ajudar! E sinta-se à vontade para comentar sobre coisas que você não trabalha mais, terei prazer em ajudar o máximo que puder.Eu uso um código como esse para mover meus sprites, ele tende a funcionar muito bem para mim e também usa "GameTime" para garantir que o movimento seja consistente entre as taxas de quadros.
Obviamente, convém fornecer mais parâmetros ao sprite durante o processo de atualização, para que você possa ter a velocidade ou outras coisas também.
fonte
Esta questão precisa de mais lambdas.
Observe que isso é de um WIP, então há alguns recursos não utilizados e implícitos, mas não implementados. Onde você vê o
() =>
add yourinputDirection.X -= -1;
. Sei que isso é para um Gamepad e você está usando um teclado, mas o princípio de agrupamento, ou pelo menos a noção do mapa de ação, ainda se aplica.Provavelmente é um exagero, mas muita diversão!
Função de instalação que mapeia os controles:
O componente do jogo que faz o trabalho (instancia 1 por jogador):
fonte
Isso significa que seu código não está fazendo o que você pensa que deveria estar fazendo ou você tem algum recurso que precisa implementar que não sabe ou deseja conselhos sobre qual recurso implementar a seguir?
De qualquer jeito...
Você não deseja subtrair um negativo para uma direção e adicionar um positivo na outra. Esses dois avaliam a mesma coisa.
fonte
Veja como estou fazendo isso em um dos meus jogos no Windows Phone. Lembre-se de que fiz algumas simplificações em nome do exemplo. No meu jogo, os inimigos seguem um conjunto de waypoints ao longo de um caminho.
No
Update
método dentro da minhaEnemy.cs
classe, eu avalioEnemy.Waypoints.Peek() - Enemy.Position
(normalizado) para determinar em qual direção o inimigo deve estar se movendo.Depois, calculo a velocidade (direção + velocidade) para o quadro atual usando a direção.
Finalmente, ajusto a posição atual do inimigo.
Isso ajuda a entender a matemática envolvida, mas é assim que você pode mover um objeto.
fonte