Últimos assuntos | » A pagina fica sempre em branco.3/9/2011, 11:27 por vinians» [PROJETO] Space Quest3/9/2011, 11:18 por vinians» Mais uma banana no sitie...3/9/2011, 09:34 por vinians» [Site] Inauguração do nosso site de desenvolvimento XCreator Minigames1/9/2011, 17:05 por vinians» [PROJETO] PacMonkey30/8/2011, 16:22 por vinians» [PROJETO] [APRENDIZADO] Rocks19/8/2011, 16:15 por vinians» [seção críticas e sugestões] Editar tópicos19/8/2011, 16:02 por vinians» Tabela - Arquivos de áudio compatíveis - HTML516/8/2011, 14:43 por vinians» Bom dia,Monkey Brasil!16/8/2011, 14:09 por GMLucas |
| | Problemas com seno e cosseno | |
| Autor | Mensagem |
---|
CaDU
Mensagens : 14 Data de inscrição : 06/08/2011
Parâmetros Advertências: (0/0)
| Assunto: Problemas com seno e cosseno 8/8/2011, 13:20 | |
| Estava explorando a ferramenta na tentativa de criar um jogo simples estilo Asteroids quando me deparei com problemas no movimento do player. O código está aparentemente correto, até mesmo confirmei o algoritmo de deslocamento com exemplos na internet, porém como podem ver no link abaixo a nave não está se comportando como deveria: Monkey AsteroidsSegue o fonte do projeto: - Código:
-
Import mojo
Function Main() New monkeyAsteroids End
Class monkeyAsteroids Extends App Function degToRad(angle:Float) angle *= (3.14159265 / 180) Return angle End
Field playerX:Float Field playerY:Float Field playerAngle:Float Field playerThrust:Float Field playerXSpeed:Float Field playerYSpeed:Float Field playerFrame:Int Field playerSprite:Image Method OnCreate() SetUpdateRate 60 playerX = DeviceWidth / 2 playerY = DeviceHeight / 2 playerAngle = 0 playerThrust = 0.5 playerXSpeed = 0 playerYSpeed = 0 playerFrame = 0 playerSprite = LoadImage("spPlayer.png", 2, Image.MidHandle) End Method OnUpdate() If KeyDown(KEY_LEFT) playerAngle += 5 Endif If KeyDown(KEY_RIGHT) playerAngle -= 5 Endif If KeyDown(KEY_UP) playerFrame = 1 playerXSpeed += playerThrust * math.Sin(degToRad(playerAngle)) playerYSpeed += playerThrust * math.Cos(degToRad(playerAngle)) Else playerFrame = 0 Endif If playerXSpeed > 8 playerXSpeed = 8 End
If playerYSpeed > 8 playerYSpeed = 8 End If playerXSpeed < -8 playerXSpeed = -8 End
If playerYSpeed < -8 playerYSpeed = -8 End playerX += playerXSpeed playerY -= playerYSpeed If playerX < -64 playerX = DeviceWidth + 64 Endif If playerX > DeviceWidth + 64 playerX = -64 Endif If playerY < -64 playerY = DeviceHeight + 64 Endif If playerY > DeviceHeight + 64 playerY = -64 Endif End Method OnRender() Cls 0, 0, 0 SetColor(255, 255, 255) SetBlend(0) DrawText("Monkey Asteroids by Carlos Mahnke", DeviceWidth / 2, 16, 0.5, 0) DrawText("Setas direcionais: Movimento | ?: Tiro", DeviceWidth / 2, 32, 0.5, 0) DrawImage(playerSprite, playerX, playerY, playerAngle, 1, 1, playerFrame) End End Grato pela atenção! |
| | | MonkeyBR
Mensagens : 34 Data de inscrição : 04/08/2011 Localização : Rio
Parâmetros Advertências: (0/0)
| Assunto: Re: Problemas com seno e cosseno 8/8/2011, 13:28 | |
| - Carlos Mahnke escreveu:
- Estava explorando a ferramenta na tentativa de criar um jogo simples estilo Asteroids quando me deparei com problemas no movimento do player.
O código está aparentemente correto, até mesmo confirmei o algoritmo de deslocamento com exemplos na internet, porém como podem ver no link abaixo a nave não está se comportando como deveria:
Monkey Asteroids
Segue o fonte do projeto: - Código:
-
Import mojo
Function Main() New monkeyAsteroids End
Class monkeyAsteroids Extends App Function degToRad(angle:Float) angle *= (3.14159265 / 180) Return angle End
Field playerX:Float Field playerY:Float Field playerAngle:Float Field playerThrust:Float Field playerXSpeed:Float Field playerYSpeed:Float Field playerFrame:Int Field playerSprite:Image Method OnCreate() SetUpdateRate 60 playerX = DeviceWidth / 2 playerY = DeviceHeight / 2 playerAngle = 0 playerThrust = 0.5 playerXSpeed = 0 playerYSpeed = 0 playerFrame = 0 playerSprite = LoadImage("spPlayer.png", 2, Image.MidHandle) End Method OnUpdate() If KeyDown(KEY_LEFT) playerAngle += 5 Endif If KeyDown(KEY_RIGHT) playerAngle -= 5 Endif If KeyDown(KEY_UP) playerFrame = 1 playerXSpeed += playerThrust * math.Sin(degToRad(playerAngle)) playerYSpeed += playerThrust * math.Cos(degToRad(playerAngle)) Else playerFrame = 0 Endif If playerXSpeed > 8 playerXSpeed = 8 End
If playerYSpeed > 8 playerYSpeed = 8 End If playerXSpeed < -8 playerXSpeed = -8 End
If playerYSpeed < -8 playerYSpeed = -8 End playerX += playerXSpeed playerY -= playerYSpeed If playerX < -64 playerX = DeviceWidth + 64 Endif If playerX > DeviceWidth + 64 playerX = -64 Endif If playerY < -64 playerY = DeviceHeight + 64 Endif If playerY > DeviceHeight + 64 playerY = -64 Endif End Method OnRender() Cls 0, 0, 0 SetColor(255, 255, 255) SetBlend(0) DrawText("Monkey Asteroids by Carlos Mahnke", DeviceWidth / 2, 16, 0.5, 0) DrawText("Setas direcionais: Movimento | ?: Tiro", DeviceWidth / 2, 32, 0.5, 0) DrawImage(playerSprite, playerX, playerY, playerAngle, 1, 1, playerFrame) End End Grato pela atenção! Amigão, ta ficando legal seu jogo! Creio que o problema é que você esta convertendo de Graus para Radianos sendo que o Monkey já está em graus! Flws! |
| | | CaDU
Mensagens : 14 Data de inscrição : 06/08/2011
Parâmetros Advertências: (0/0)
| Assunto: Re: Problemas com seno e cosseno 8/8/2011, 13:33 | |
| Todas as referências que consultei pra confirmar o algoritmo do movimento da nave utilizam a conversão pra radiano.
Confesso que sou ruim com matemática então não sei bem qual a finalidade disso, em todo caso usando em graus também não funciona ou fica até pior =/ |
| | | MonkeyBR
Mensagens : 34 Data de inscrição : 04/08/2011 Localização : Rio
Parâmetros Advertências: (0/0)
| Assunto: Re: Problemas com seno e cosseno 8/8/2011, 14:06 | |
| Amigo, fiz algumas alterações na matemática do código e funcionou veja: - Código:
-
Import mojo
Function Main() New monkeyAsteroids End
Class monkeyAsteroids Extends App Function degToRad(angle:Float) angle *= (3.14159265 / 180) Return angle End
Field playerX:Float Field playerY:Float Field playerAngle:Float Field playerThrust:Float Field playerXSpeed:Float Field playerYSpeed:Float Field playerFrame:Int Field playerSprite:Image Method OnCreate() SetUpdateRate 60 playerX = DeviceWidth / 2 playerY = DeviceHeight / 2 playerAngle = 0 playerThrust = 0.2 playerXSpeed = 0 playerYSpeed = 0 playerFrame = 0 playerSprite = LoadImage("spPlayer.png", 2, Image.MidHandle) End Method OnUpdate() If KeyDown(KEY_LEFT) playerAngle -= 5 Endif If KeyDown(KEY_RIGHT) playerAngle += 5 Endif If KeyDown(KEY_UP) playerFrame = 1 playerXSpeed += playerThrust * math.Cos(playerAngle) playerYSpeed += playerThrust * math.Sin(playerAngle) Else playerFrame = 0 Endif If playerXSpeed > 8 playerXSpeed = 8 End
If playerYSpeed > 8 playerYSpeed = 8 End If playerXSpeed < -8 playerXSpeed = -8 End
If playerYSpeed < -8 playerYSpeed = -8 End playerX += playerXSpeed playerY += playerYSpeed If playerX < -64 playerX = DeviceWidth + 64 Endif If playerX > DeviceWidth + 64 playerX = -64 Endif If playerY < -64 playerY = DeviceHeight + 64 Endif If playerY > DeviceHeight + 64 playerY = -64 Endif End Method OnRender() Local x2, y2 Cls 0, 0, 0 SetColor(255, 255, 255) SetBlend(0) DrawText("Monkey Asteroids by Carlos Mahnke", DeviceWidth / 2, 16, 0.5, 0) DrawText("Setas direcionais: Movimento | ?: Tiro", DeviceWidth / 2, 32, 0.5, 0) x2 = playerX + Cos(playerAngle) * 10 y2 = playerY + Sin(playerAngle) * 10 DrawLine(playerX, playerY, x2, y2) SetColor(255, 0, 0) DrawCircle(x2, y2, 4) ' DrawImage(playerSprite, playerX, playerY, playerAngle, 1, 1, playerFrame) End End
Obs. Substitui a nave por um representante primitivo pois nao tinha a nave. Aqui deu certo! Flws! |
| | | CaDU
Mensagens : 14 Data de inscrição : 06/08/2011
Parâmetros Advertências: (0/0)
| Assunto: Re: Problemas com seno e cosseno 8/8/2011, 14:31 | |
| Funcionou mesmo, o seu só estava indo pro lado errado a princípio (quando atualizei no meu a nave andava pra trás XP). Versão funcional: Monkey AsteroidsFonte atualizado: - Código:
-
Import mojo
Function Main() New monkeyAsteroids End
Class monkeyAsteroids Extends App Field playerX:Float Field playerY:Float Field playerAngle:Float Field playerThrust:Float Field playerXSpeed:Float Field playerYSpeed:Float Field playerFrame:Int Field playerSprite:Image Method OnCreate() SetUpdateRate 60 playerX = DeviceWidth / 2 playerY = DeviceHeight / 2 playerAngle = 0 playerThrust = 0.5 playerXSpeed = 0 playerYSpeed = 0 playerFrame = 0 playerSprite = LoadImage("spPlayer.png", 2, Image.MidHandle) End Method OnUpdate() If KeyDown(KEY_LEFT) playerAngle += 5 Endif If KeyDown(KEY_RIGHT) playerAngle -= 5 Endif If KeyDown(KEY_UP) playerFrame = 1 playerXSpeed -= playerThrust * math.Sin(playerAngle) playerYSpeed -= playerThrust * math.Cos(playerAngle) Else playerFrame = 0 Endif If playerXSpeed > 8 playerXSpeed = 8 End
If playerYSpeed > 8 playerYSpeed = 8 End If playerXSpeed < -8 playerXSpeed = -8 End
If playerYSpeed < -8 playerYSpeed = -8 End playerX += playerXSpeed playerY += playerYSpeed If playerX < -64 playerX = DeviceWidth + 64 Endif If playerX > DeviceWidth + 64 playerX = -64 Endif If playerY < -64 playerY = DeviceHeight + 64 Endif If playerY > DeviceHeight + 64 playerY = -64 Endif End Method OnRender() Cls 0, 0, 0 SetColor(255, 255, 255) SetBlend(0) DrawText("Monkey Asteroids by Carlos Mahnke", DeviceWidth / 2, 16, 0.5, 0) DrawText("Setas direcionais: Movimento | ?: Tiro", DeviceWidth / 2, 32, 0.5, 0) DrawImage(playerSprite, playerX, playerY, playerAngle, 1, 1, playerFrame) End End |
| | | MonkeyBR
Mensagens : 34 Data de inscrição : 04/08/2011 Localização : Rio
Parâmetros Advertências: (0/0)
| Assunto: Re: Problemas com seno e cosseno 8/8/2011, 14:37 | |
| Show! Agora funcionou mesmo. Gostei da nave! Que venham os asteroides heheehe Tópico Resolvido. Trancado. |
| | | Conteúdo patrocinado
| Assunto: Re: Problemas com seno e cosseno | |
| |
| | | | Problemas com seno e cosseno | |
|
Página 1 de 1 | |
| Permissões neste sub-fórum | Não podes responder a tópicos
| |
| |
| |