GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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

Ir para baixo

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

Mensagem por guiagge 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
guiagge

Data de inscrição : 24/09/2008
Reputação : 0
Número de Mensagens : 90
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por reddragon Qui 09 Dez 2010, 15:54

se toda duvida fosse fácil:

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

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

Data de inscrição : 19/03/2008
Reputação : 0
Número de Mensagens : 267
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por guiagge 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
guiagge

Data de inscrição : 24/09/2008
Reputação : 0
Número de Mensagens : 90
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por reddragon 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
Movimentação - Speed e Direction p/ Hspeed e Vspeed Expbbox

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
reddragon

Data de inscrição : 19/03/2008
Reputação : 0
Número de Mensagens : 267
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por Henrique_GJ 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
Henrique_GJ

Data de inscrição : 30/12/2009
Reputação : 4
Número de Mensagens : 1344
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Java
  • C ou C++


http://sitedosjogos.forumeiros.com

Ir para o topo Ir para baixo

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

Mensagem por PedroX Sex 10 Dez 2010, 14:06

o lengthdir funciona assim:

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

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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

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

Mensagem por guiagge 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. 😢

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

Data de inscrição : 24/09/2008
Reputação : 0
Número de Mensagens : 90
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por Henrique_GJ 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
Henrique_GJ

Data de inscrição : 30/12/2009
Reputação : 4
Número de Mensagens : 1344
Prêmios : Movimentação - Speed e Direction p/ Hspeed e Vspeed Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Java
  • C ou C++


http://sitedosjogos.forumeiros.com

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos