Entrar
Últimos assuntos
» Preciso de ajudapor AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Qui 18 Abr 2024, 18:28
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» 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
ajuda com rotacionar objeto e física
2 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
ajuda com rotacionar objeto e física
aew pessoal, já peço desculpas pela falta de conhecimentos, mas por isso estou aki
estou com um problema
meu jogo é plataforma 2d
com scripts básicos para isso,
porém eu tenho uma plataforma quadrada, e gostaria que ela rotacionasse 90º a cada X segundos... tudo bem conseguir fazer com sprites isso, mas fica ruuuim demais pelo fato de não ser o certo, funciona mas não é o certo....
depois tem um problema... o jogador quando está na plataforma não reage bem a rotação... ele fica estático... ele deveria ser "lançado" para direção em que a plataforma rotaciona...
alguém poderia me dar uma luz?
muito obrigado!!!!
estou com um problema
meu jogo é plataforma 2d
com scripts básicos para isso,
porém eu tenho uma plataforma quadrada, e gostaria que ela rotacionasse 90º a cada X segundos... tudo bem conseguir fazer com sprites isso, mas fica ruuuim demais pelo fato de não ser o certo, funciona mas não é o certo....
depois tem um problema... o jogador quando está na plataforma não reage bem a rotação... ele fica estático... ele deveria ser "lançado" para direção em que a plataforma rotaciona...
alguém poderia me dar uma luz?
muito obrigado!!!!
Duca- Data de inscrição : 27/09/2014
Reputação : 1
Número de Mensagens : 27
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: ajuda com rotacionar objeto e física
Bem, o que é mais adequado pra fazer com que o jogador seja jogado é fazendo que você use a engine de fisica do GM (LiquidFun/Box2D)
Mas suponho que você não esta fazendo isso xD
Mas relaxa que eu tive uma ideia, se eu entendi bem, tem um bloco que gira, e quando o bloco girar o jogador sera lançado. Ok.
Pra fazer com que o bloco gire a cada tantos segundos, faça o seguinte.
Create:
Step:
Para fazer o jogador ser jogado pela plataforma, no Script de colisão dele basta verificar se ele esta rotacionando. Por exemplo no Collision event do jogador com a plataforma:
Se o jogador ficar travado no bloco, desligue a colisão dele com o bloco enquanto o bloco esta girando para que ele seja jogado de maneira correta.
Eu escrevi isso tudo no Forum, ou seja, eu não testei o script, então deve ter alguns errinhos de syntax, mas nada que seja impossivel de arrumar.
Mas suponho que você não esta fazendo isso xD
Mas relaxa que eu tive uma ideia, se eu entendi bem, tem um bloco que gira, e quando o bloco girar o jogador sera lançado. Ok.
Pra fazer com que o bloco gire a cada tantos segundos, faça o seguinte.
Create:
- Código:
rotation_timer=3*room_speed //Define a cada quantos segundos a bagaça vai girar.
rotate_timer=rotation_timer //Este é o Timer, No step eu explico o que ele faz
way=-1 //Use -1 ou 1, Isso vai definir em qual o bloco vai girar e em que ele vai ser jogado. Basicamente esta variavel vai servir para multiplicar alguns valores, fazendo com que a direção na qual o bloco vai girar mude (NÃO USE VALORES QUEBRADOS)
angle_target=image_angle+(90*way) //Isso aqui define para aonde o bloco vai girar, neste caso é 90 graus no sentido antihorario.
rotating=false //Aqui define se vai rotacionar ou nao, vai servir na hora de jogar o jogador pra longe
rotation_speed=5 //Recomendo deixar em 1,2,3,5,6 ou 9, caso contrario a plataforma vai girar mais do que deve
Step:
- Código:
rotate_timer-=1 //Aqui ele vai diminuir o timer, toda vez que o timer chegar a 0, ele vai resetar e realizar uma ação, que no caso seria
if rotate_timer<=0 //Se chegar a zero, realiza a ação
{
rotating=true //Ele esta girando
angle_target=image_angle+(90*way) //E define para qual direcao o bloco vai girar.
rotate_timer=rotation_timer //E reseta o Timer
}
if rotating=true //Se estiver girando
{
if image_angle!=angle_target
{image_angle+=(rotation_speed*way)} //Caso o angulo não é igual ao "alvo" da direção, ele gira na velocidade indicada no create
else {rotating=false} //Caso contrario ele para de girar
}
//Agora se o estiver tudo correto, o bloco deve girar corretamente a cada 3 segundos como foi definido no create.
Para fazer o jogador ser jogado pela plataforma, no Script de colisão dele basta verificar se ele esta rotacionando. Por exemplo no Collision event do jogador com a plataforma:
- Código:
if other.rotating=true
{motion_add(90+(45*way),10)} // Caso o jogador colida com a plataforma enquanto ela esta girando, o jogador vai ser jogado meio que na diagonal esquerda
Se o jogador ficar travado no bloco, desligue a colisão dele com o bloco enquanto o bloco esta girando para que ele seja jogado de maneira correta.
Eu escrevi isso tudo no Forum, ou seja, eu não testei o script, então deve ter alguns errinhos de syntax, mas nada que seja impossivel de arrumar.
Black Studio- Games Ranking :
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Reputação : 9
Número de Mensagens : 337
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Re: ajuda com rotacionar objeto e física
muuuito obrigado!
eu vou testar e te falo o que consegui
vlwwww
eu vou testar e te falo o que consegui
vlwwww
Duca- Data de inscrição : 27/09/2014
Reputação : 1
Número de Mensagens : 27
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: ajuda com rotacionar objeto e física
Para fazer o jogador ser jogado pela plataforma, no Script de colisão dele basta verificar se ele esta rotacionando. Por exemplo no Collision event do jogador com a plataforma:
Código:
if other.rotating=true
{motion_add(90+(45*way),10)} // Caso o jogador colida com a plataforma enquanto ela esta girando, o jogador vai ser jogado meio que na diagonal esquerda
A rotação ficou perfeita!!!!!
só esse comando deu fatal erro...
ele não reage bem ao motion_add... não sei por que... vou tentar mudar mais algumas coisas...
aproveitando
caso eu queira que um objeto siga essa rotação... eu tenho como? digamos que siga uma das faces da plataforma, como no caso de uma "trap", assim o jogador poderia pisar em apenas 3 das 4 faces da plataforma...
eu pensei em um jeito de fazer, que seria com o mesmo script da plataforma e apenas deixaria o sprite da trap centralizada com o da plataforma... funcional, mas acredito ter um jeito certo...
obrigado pela ajuda!!!!
Duca- Data de inscrição : 27/09/2014
Reputação : 1
Número de Mensagens : 27
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: ajuda com rotacionar objeto e física
Opa, que bom, agora que eu percebi, ao inves de usar Motion_add, tente usar motion_set e o resultado deve ser melhor.
Uma boa maneira de fazer isso é usando ID, por exemplo no create da Trap você coloca:
Ai no Step da Trap você muda a posição e o angulo dele de acordo com a Trap
Por exemplo:
Tem sim, basta você linkar a Poison com a plataforma (Cazalbé curtiu isso)Duca escreveu:caso eu queira que um objeto siga essa rotação... eu tenho como?
Uma boa maneira de fazer isso é usando ID, por exemplo no create da Trap você coloca:
- Código:
target=id-1 //ID do objeto que vai usar como referencia
Ai no Step da Trap você muda a posição e o angulo dele de acordo com a Trap
Por exemplo:
- Código:
x=target.x+lengthdir_x(18, target.image_angle);
y=target.y+lengthdir_y(18, target.image_angle);
image_angle=target.image_angle
Black Studio- Games Ranking :
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Reputação : 9
Número de Mensagens : 337
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Re: ajuda com rotacionar objeto e física
Entendi, acho que vou conseguir fazer desse jeito aí funcionar bem, amanhã vou testar essa parte então, bem interessante... eu penso de umas formas que são totalmente mais trabalhosas e com certeza bem menos funcional... eu consegui fazer um esquema com um script de pulo, quando rotation=true ele pula... fica bem coerente, mas como falei, nada funcional...
Desculpa por mais uma pergunta:
Eu pensei em fazer uma mega plataforma!!! quase do tamanho da room, em que ela gire
mas aí encontrei um sério problema... quando ela gira o jogador fica lá no meio dela.. preso... se usar física ele não seria jogado de um lado para o outro dentro da mega plataforma? como se fosse uma bala dentro de uma lata chacoalhando (que comparação doida )
enfim, eu vejo que pouca gente usa physics... tem algum motivo?
eu tenho uma ideia de usar um script que vi naquele tutorial do gms, "save&load" , lá ele usa um esquema de colisão interessante... dá de ter uma ideia ao menos e aprimorar... mas se alguém já ter visto algo parecido, por favor!
Eu vivo pesquisando no help e aki no gmbr muitas coisas... e aprendi um monte, mas algumas coisas eu não sei ao certo como procurar....
vlw AEW
Desculpa por mais uma pergunta:
Eu pensei em fazer uma mega plataforma!!! quase do tamanho da room, em que ela gire
mas aí encontrei um sério problema... quando ela gira o jogador fica lá no meio dela.. preso... se usar física ele não seria jogado de um lado para o outro dentro da mega plataforma? como se fosse uma bala dentro de uma lata chacoalhando (que comparação doida )
enfim, eu vejo que pouca gente usa physics... tem algum motivo?
eu tenho uma ideia de usar um script que vi naquele tutorial do gms, "save&load" , lá ele usa um esquema de colisão interessante... dá de ter uma ideia ao menos e aprimorar... mas se alguém já ter visto algo parecido, por favor!
Eu vivo pesquisando no help e aki no gmbr muitas coisas... e aprendi um monte, mas algumas coisas eu não sei ao certo como procurar....
vlw AEW
Duca- Data de inscrição : 27/09/2014
Reputação : 1
Número de Mensagens : 27
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
mudando de ideia
Aeew
Desisti e decidi usar a física mesmo para poder fazer a coisa funcionar... mas tenho umas duvidas e problemas... que o jogador pula ele faz certinho, mas se ele ainda estiver no ar e apertar para pular de novo... e vai de encontro ao chão... ou seja... “pula para baixo”...
Isso não fica legal... segue o código...
Step:
Nada... tem como diminuir a velocidade da rotação? Tem um monte de coisa e nada...
Plataforma
Create:
step:
Uma outra coisa... as unicas formas de colisão são aquelas setadas para sólidos? Shape, circulo e Box?
Eu não consigo fazer ele pegar outra forma, como a mascara?
Se a resposta for não eu gostaria de fazer uma caixa fechada com blocos e fazer toda a caixa girar de acordo com o centro dela
Digamos que todos os blocos que formam a caixa seguiriam a rotação de um objeto central, sem perder a formação e se perderem na room... eu vi na engine de physics do Joex3, mas pelo que entendi ele gira toda view... isso não é legal.... queria girar apenas alguns objetos...
Pode parecer que não vou atrás das coisas, mas acreditem... já mexi de monte nisso e tentei uma penca de coisas... pode ser que tenha uma engine já pronta, mas queria aprender a fazer...
Vlw pela ajuda aew
Desisti e decidi usar a física mesmo para poder fazer a coisa funcionar... mas tenho umas duvidas e problemas... que o jogador pula ele faz certinho, mas se ele ainda estiver no ar e apertar para pular de novo... e vai de encontro ao chão... ou seja... “pula para baixo”...
Isso não fica legal... segue o código...
Step:
- Código:
//PULO
if keyboard_check_pressed(vk_space)
{{
physics_apply_local_impulse (0,0, 0,12)
if global.direcao = 0
sprite_index = spr_pulo
else
sprite_index = spr_pulo_2
}}
Nada... tem como diminuir a velocidade da rotação? Tem um monte de coisa e nada...
Plataforma
Create:
- Código:
var fixture;
fixture = physics_fixture_create();
physics_fixture_set_box_shape(fixture, sprite_get_width(sprite_index)/2, sprite_get_height(sprite_index)/2);
physics_fixture_set_density(fixture, 0);
physics_fixture_set_friction(fixture, 0.2);
physics_fixture_bind(fixture, self);
physics_fixture_delete(fixture);
//image_speed = 0.4
image_speed = 0.4
rotation_timer=3*room_speed //Define a cada quantos segundos a bagaça vai girar.
rotate_timer = rotation_timer //Este é o Timer, No step eu explico o que ele faz
way = -1 //Use -1 ou 1, Isso vai definir em qual o bloco vai girar e em que ele vai ser jogado. Basicamente esta variavel vai servir para multiplicar alguns valores, fazendo com que a direção na qual o bloco vai girar mude (NÃO USE VALORES QUEBRADOS)
angle_target = image_angle+(90*way) //Isso aqui define para aonde o bloco vai girar, neste caso é 90 graus no sentido antihorario.
rotating = false //Aqui define se vai rotacionar ou nao, vai servir na hora de jogar o jogador pra longe
rotation_speed = 5 //Recomendo deixar em 1,2,3,5,6 ou 9, caso contrario a plataforma vai girar mais do que deve
step:
- Código:
rotate_timer-=1 //Aqui ele vai diminuir o timer, toda vez que o timer chegar a 0, ele vai resetar e realizar uma ação, que no caso seria
if rotate_timer<=0 //Se chegar a zero, realiza a ação
{
rotating=true //Ele esta girando
phy_rotation += 90
rotate_timer=rotation_timer //E reseta o Timer
}
Uma outra coisa... as unicas formas de colisão são aquelas setadas para sólidos? Shape, circulo e Box?
Eu não consigo fazer ele pegar outra forma, como a mascara?
Se a resposta for não eu gostaria de fazer uma caixa fechada com blocos e fazer toda a caixa girar de acordo com o centro dela
Digamos que todos os blocos que formam a caixa seguiriam a rotação de um objeto central, sem perder a formação e se perderem na room... eu vi na engine de physics do Joex3, mas pelo que entendi ele gira toda view... isso não é legal.... queria girar apenas alguns objetos...
Pode parecer que não vou atrás das coisas, mas acreditem... já mexi de monte nisso e tentei uma penca de coisas... pode ser que tenha uma engine já pronta, mas queria aprender a fazer...
Vlw pela ajuda aew
Duca- Data de inscrição : 27/09/2014
Reputação : 1
Número de Mensagens : 27
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: ajuda com rotacionar objeto e física
Acho que é porque é meio dificil xDDuca escreveu:enfim, eu vejo que pouca gente usa physics... tem algum motivo?
Substitua o "physics_apply_local_impulse" por "physics_apply_impulse" ( O Local aplica uma força de acordo com a direção do objeto)Duca escreveu:o jogador pula ele faz certinho, mas se ele ainda estiver no ar e apertar para pular de novo... e vai de encontro ao chão... ou seja... “pula para baixo”.
Agora outro problema com a plataforma... ela tem que girar... blz ela gira... mas muito rápido... e o que acontece?
Nada... tem como diminuir a velocidade da rotação? Tem um monte de coisa e nada...
Substitua o phy_rotation += 90 por phy_rotation += rotation_speed*way
Caso você esteja se referindo a rotação da plataforma quando o jogador pisa nela, ai você precisa aumentar a densidade (massa/m²) da plataforma, fazendo com que a força exercida sobre ela não seja o suficiente para gira-la tao rápido.
SimDuca escreveu:Uma outra coisa... as unicas formas de colisão são aquelas setadas para sólidos? Shape, circulo e Box?
Você não pode pegar a Mascara, porém você pode criar uma forma diferente usando polígonos.Duca escreveu:Eu não consigo fazer ele pegar outra forma, como a mascara?
Black Studio- Games Ranking :
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Reputação : 9
Número de Mensagens : 337
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
muuuuito BOM!!!!!! Rotacionar com physics (fisica)
ok, consegui fazer com física o que eu tinha em mente no começo quando vc começou a me ajudar! fiquei beeeem feliz com o resultado...
vou compartilhar com o pessoal aki como ficou e talvez sirva de ajuda para mais alguém.
O código serve para rotacionar um objeto em um ambiente com física a cada x segundos. Esse está setado para 3 segundos. caso queria rotação continua é só remover uma parte e deu!
Create:
No step:
bem.. é isso
obrigado
créditos e agradecimento ao Black Studio
vou compartilhar com o pessoal aki como ficou e talvez sirva de ajuda para mais alguém.
O código serve para rotacionar um objeto em um ambiente com física a cada x segundos. Esse está setado para 3 segundos. caso queria rotação continua é só remover uma parte e deu!
Create:
- Código:
var fixture;
fixture = physics_fixture_create();
physics_fixture_set_box_shape(fixture, sprite_get_width(sprite_index)/2, sprite_get_height(sprite_index)/2);
physics_fixture_set_density(fixture, 0);
physics_fixture_set_friction(fixture, 0.2);
physics_fixture_bind(fixture, self);
physics_fixture_delete(fixture);
//tudo até aqui foi para setar a física no bloco
rotation_timer=3*room_speed //Define a cada quantos segundos a bagaça vai girar.
rotate_timer = rotation_timer //Este é o Timer, No step eu explico o que ele faz
way = -1 //Use -1 ou 1, Isso vai definir em qual o bloco vai girar e em que ele vai ser jogado. Basicamente esta variavel vai servir para multiplicar alguns valores, fazendo com que a direção na qual o bloco vai girar mude (NÃO USE VALORES QUEBRADOS)
angle_target = phy_rotation +(90*way)//Isso aqui define para aonde o bloco vai girar, neste caso é 90 graus no sentido antihorario.
rotating = false //Aqui define se vai rotacionar ou nao, vai servir na hora de jogar o jogador pra longe
rotation_speed=5//Recomendo deixar em 1,2,3,5,6 ou 9, caso contrario a plataforma vai girar mais do que deve
No step:
- Código:
rotate_timer-=1 //Aqui ele vai diminuir o timer, toda vez que o timer chegar a 0, ele vai resetar e realizar uma ação, que no caso seria
if rotate_timer<=0 //Se chegar a zero, realiza a ação
{
rotating=true //Ele esta girando
angle_target = phy_rotation +(90*way)
rotate_timer=rotation_timer //E reseta o Timer
}
if rotating=true //Se estiver girando
{
if phy_rotation !=angle_target
{phy_rotation += (rotation_speed*way)} //Caso o angulo não é igual ao "alvo" da direção, ele gira na velocidade indicada no create
else
{rotating=false} //Caso contrario ele para de girar
}
//funciona!!!
bem.. é isso
obrigado
créditos e agradecimento ao Black Studio
Duca- Data de inscrição : 27/09/2014
Reputação : 1
Número de Mensagens : 27
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» Mover objeto em Room de fisica
» arrastar com o mouse (objeto com fisica)?
» Como fazer a imagem rotacionar para um certo lado se clicarmos num certo objeto?
» Preciso de ajuda em fisica
» Física do bloco-Ajuda
» arrastar com o mouse (objeto com fisica)?
» Como fazer a imagem rotacionar para um certo lado se clicarmos num certo objeto?
» Preciso de ajuda em fisica
» Física do bloco-Ajuda
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos