Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49
» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21
» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21
» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39
» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
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