Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Movimentação - Speed e Direction p/ Hspeed e Vspeed
4 participantes
Página 1 de 1
Movimentação - Speed e Direction p/ Hspeed e Vspeed
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:
Neste caso, eu quero saber: se eu usasse
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...)
Por exemplo, no evento Create, ao invés de usar:
- Código:
direction = 90
speed = 5
- Código:
hpeed = 0
vspeed = 5
Neste caso, eu quero saber: se eu usasse
- Código:
direction = dir
speed = vel
- 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...)
guiagge- Data de inscrição : 24/09/2008
Reputação : 0
Número de Mensagens : 90
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
se toda duvida fosse fácil:
- Código:
hspeed = lengthdir_x(speed,direction)
vspeed = lengthdir_y(speed,direction)
reddragon- Data de inscrição : 19/03/2008
Reputação : 0
Número de Mensagens : 267
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
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:
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.
É 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- Data de inscrição : 24/09/2008
Reputação : 0
Número de Mensagens : 90
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
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:
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.
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:
mais 1 é só para garantir que os dois não irão mesmo estar encostados.
espero ter ajudado e outras duvidas continue perguntando.
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)}
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- Data de inscrição : 19/03/2008
Reputação : 0
Número de Mensagens : 267
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
credo isso aí que o reddragon explicou é muito pra minha kbeça guardar
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?
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?
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
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
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
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
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.
Valeu mesmo aos dois, vou dar uma olhada aqui no que posso fazer. Se puderem ajudar...
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.
Valeu mesmo aos dois, vou dar uma olhada aqui no que posso fazer. Se puderem ajudar...
guiagge- Data de inscrição : 24/09/2008
Reputação : 0
Número de Mensagens : 90
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Movimentação - Speed e Direction p/ Hspeed e Vspeed
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
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
Tópicos semelhantes
» Hspeed e Vspeed em direção a obj.
» Transformar ângulo em hspeed e vspeed
» [Resolvido] como limitar hspeed e vspeed?
» Sempre que ponho speed=0 direction fica =180
» Dúvida-Erro em jogo com DIRECTION,SPEED e GRAVITY!
» Transformar ângulo em hspeed e vspeed
» [Resolvido] como limitar hspeed e vspeed?
» Sempre que ponho speed=0 direction fica =180
» Dúvida-Erro em jogo com DIRECTION,SPEED e GRAVITY!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos