Movimentação - Speed e Direction p/ Hspeed e Vspeed

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por guiagge em Qui 09 Dez 2010, 14:02

Acho que o título já diz quase tudo: como faço pra "converter" as variáveis speed e direction (ou estas mesma no motion set) nas velocidades verticais e horizontais? (Acho que ando dormindo na aula de Física, hehehe...)

Por exemplo, no evento Create, ao invés de usar:
Código:
direction = 90
speed = 5
Eu podia usar:
Código:
 hpeed = 0
vspeed = 5

Neste caso, eu quero saber: se eu usasse
Código:
direction = dir
speed = vel
como ficaria em hspeed e vspeed?
Código:
 hpeed = ?
vspeed = ?

Desde já agradeço (e peço desculpas, pois ja vi o Kabeção falando sobre isso numa resposta a um cara que disse que não precisava usar gravity, só vspeed nos jogos, e o Kabeça mostrou como converter, mas não achei o post...) No

guiagge

Número de Mensagens : 90
Idade : 21
Data de inscrição : 24/09/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por reddragon em Qui 09 Dez 2010, 15:54

se toda duvida fosse fácil:

Código:
hspeed = lengthdir_x(speed,direction)
vspeed = lengthdir_y(speed,direction)


reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por guiagge em Sex 10 Dez 2010, 09:15

Valeu mesmo, reddragon, o código funcionou, mas não serviu para o que eu queria usar...
É que eu quero fazer com que o objeto "jogador_obj" atire um objeto "tiro_obj" quando se aperte X. Só que quando o objeto do tiro colide com qualquer objeto "vivo" (incluindo o próprio "jogador obj") ele desaparece e causa dano a este objeto. O problema é que quando aperto X o jogador se acerta com o próprio tiro! Sei que poderia criar o tiro a certa distância do jogador, como por exemplo:
Código:
if (dir=0) {instance_create(x+16,y,tiro_obj)}
if (dir=1) {instance_create(x,y-16,tiro_obj)}
if (dir=2) {instance_create(x-16,y,tiro_obj)}
if (dir=3) {instance_create(x,y+16,tiro_obj)}
//dir = direção (0=direita; 1=cima; 2=esquerda; 3 =baixo)

Só que o jogador pode mudar de tamanho, e no caso de ele vir a ficar maior, o erro ocorreria novamente.

Desculpe a chatice mas: como checo o tamanho da mask de um objeto e crio o tiro sem colidir com o "atirador"?
Por favor, me ajudem.
Qualquer sugestão é bem vinda.

guiagge

Número de Mensagens : 90
Idade : 21
Data de inscrição : 24/09/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por reddragon em Sex 10 Dez 2010, 11:47

bom agora seu problema fico um pouco mais complicado mas ainda tem solução.

no GM existem umas variareis referentes a imagem que o obj tem selecionada algumas delas são:

sprite_width indica o tamanho total em largura do sprite
sprite_height indica o tamanho total em altura do sprite

sprite_xoffset retorna a posição em x da origem do sprite (origem configurada na edição de sprites)
sprite_yoffset retorna a posição em y da origem do sprite (origem configurada na edição de sprites)

bbox_left retorna o tamanho entre a origem e o fim da mascara* para a esquerda
bbox_right retorna o tamanho entre a origem e o fim da mascara* para a direita
bbox_top retorna o tamanho entre a origem e o fim da mascara* para cima
bbox_bottom retorna o tamanho entre a origem e o fim da mascara* para baixo

*mascara = é a área de efetiva colisão dos objs.

obs: todos esses valores a cima são somente de consulto não podendo se alterados.

esta imagem mostra onde é a localização cada valor a cima citados


agora alterando seu script ficaria assim:

Código:
if (dir=0) {instance_create(x + bbox_right + 16, y, tiro_obj)}
if (dir=1) {instance_create(x, y - bbox_top - 16, tiro_obj)}
if (dir=2) {instance_create(x - bbox_left - 16, y, tiro_obj)}
if (dir=3) {instance_create(x, y + bbox_bottom + 16, tiro_obj)}

agora se você alterar a imagem atribuída a ao seu obj as variareis irão se alterar e seu tiro adequara a sua imagem.

entretanto ainda da pra melhorar mais um pouquinho porque além da imagem do player tem a imagem do tiro que pode afetar na colisão.

Código:
if (dir=0) {instance_create(x + bbox_right + 16 + tiro_obj.bbox_left, y, tiro_obj)}
if (dir=1) {instance_create(x, y - bbox_top - 16 - tiro_obj.bbox_bottom, tiro_obj)}
if (dir=2) {instance_create(x - bbox_left - 16 - tiro_obj.bbox_right, y, tiro_obj)}
if (dir=3) {instance_create(x, y + bbox_bottom + 16 + tiro_obj.bbox_top, tiro_obj)}
usando tiro_obj.varival referenciamos a variável no outro obj entretanto como estamos criando ainda o tiro_obj no podemos referenciar nada dele pois ele ainda nao existe.

porem se você souber a imagem que o tiro_obj esta configurado podemos usar os seguintes comandos:

sprite_get_bbox_left(nome_do_sprite) retorna o tamanho entre a origem e o fim da mascara para a esquerda do sprite selecionado (equivalente a bbox_lef)
sprite_get_bbox_right(nome_do_sprite) retorna o tamanho entre a origem e o fim da mascara para a direita do sprite selecionado (equivalente a bbox_right)
sprite_get_bbox_top(nome_do_sprite) retorna o tamanho entre a origem e o fim da mascara para cima do sprite selecionado (equivalente a bbox_top)
sprite_get_bbox_bottom(nome_do_sprite) retorna o tamanho entre a origem e o fim da mascara para baixo do sprite selecionado (equivalente a bottom)

seu código deve ficar assim:

Código:
if (dir=0) {instance_create(x + bbox_right + 1 + sprite_get_bbox_left(tiro_spr), y, tiro_obj)}
if (dir=1) {instance_create(x, y - bbox_top - 1 - sprite_get_bbox_bottom(tiro_spr), tiro_obj)}
if (dir=2) {instance_create(x - bbox_left - 1 - sprite_get_bbox_right(tiro_spr), y, tiro_obj)}
if (dir=3) {instance_create(x, y + bbox_bottom + 1 + sprite_get_bbox_top(tiro_spr), tiro_obj)}

mais 1 é só para garantir que os dois não irão mesmo estar encostados.

espero ter ajudado e outras duvidas continue perguntando.

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por Henrique_GJ em Sex 10 Dez 2010, 13:37

credo isso aí que o reddragon explicou é muito pra minha kbeça guardar Razz

eu faria de uma forma diferente

criaria dois objetos, como exemplo chamamos eles de tiro1 e tiro2

o player criava o tiro1 normalmente como se fosse o tiro

depois eu colocava no step do tiro1:

if ! place_meeting(x,y,player_obj)
{
instance_create(x,y,tiro2)
}

isso criava o tiro que causa danos aos players e aos inimigos só quando o tiro não estiver mais colidindo com o player

só falta uma coisa: o tiro é criado mas em que direção ele deve seguir, em que velocidade, e quando o tiro1 deverá ser destruido? simples:

no collision do tiro2 com o tiro1

speed = other.speed
direction = other.direction
hspeed = other.hspeed
vspeed = other.vspeed
gravity = other.gravity
with(other) {instance_destroy()}


prontinho funfa com certeza, edite o codigo a vontade para que o tiro2 copie somente as variaveis do tiro1 que vc quizer mas desse jeito aí o tiro vai sair perfeitamente sem curvas nem nada



aliás

para que esse codigo?

hspeed = lengthdir_x(speed,direction)
vspeed = lengthdir_y(speed,direction)

eu não entendi para que ele serve

posso usar isso no 3d para não ter que usar seno cosseno e tangente?

Henrique_GJ

Número de Mensagens : 1344
Idade : 19
Data de inscrição : 30/12/2009
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://sitedosjogos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por PedroX em Sex 10 Dez 2010, 14:06

o lengthdir funciona assim:



imagina que a hipotenusa seria do tamanho de 10 pixels...
jogando esses dados na funcao la:

lengthdir_x(315,10)
retornaria o tamanho do cateto 1....

lengthdir_y(315,10)
retornaria o tamanho do cateto 2

FLW

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por guiagge em Ter 14 Dez 2010, 14:10

Foi mal a demora pra responder. Reddragon, tentei usar seu código mas... o tiro aparece bem longe do jogador. Quando atiro pra direita, ele aparece mais ou menos uns 128 pixels pro lado do jogador. :|
Henrique, acho que criar mais um objeto é despedício. É só fazer uma variável e só causar dano quanto ela for igual a 1. Daí quando ele parar de colidir com o jogador, seta ela pra 1. Mas de qualquer jeito sua ideia não vai adiantar muito, pois no caso de eu atirar grudado com outro jogador obj, ele vai atravessar o dois e não vai causar dano ao outro. :cry:

Valeu mesmo aos dois, vou dar uma olhada aqui no que posso fazer. Se puderem ajudar...

guiagge

Número de Mensagens : 90
Idade : 21
Data de inscrição : 24/09/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por Henrique_GJ em Ter 14 Dez 2010, 14:39

a sim ja sei

coloca para aplicar ao tiro uma variavel chamada criador, e essa variavel guarda o valor do ID do objeto que a criou, e dai na colisão do objeto com um outro objeto qualquer vc coloca

if other <> criador

ou seja, se o id do objeto atingido for diferente do id do objeto criador ele mata

ai vc diz: mas daí ele não vai matar o proprio jogador caso o tiro va pra cima e caia

simples. faz aquilo que lhe falei, crie dois objetos ou uma variavel e pronto

é só "apliar" o codigo que vc consegue
aí vc volta pro inicio

Henrique_GJ

Número de Mensagens : 1344
Idade : 19
Data de inscrição : 30/12/2009
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://sitedosjogos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed

Mensagem por Conteúdo patrocinado Hoje à(s) 15:41


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum