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
» 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

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