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
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?
» Física do bloco-Ajuda
» Preciso de ajuda em fisica
» arrastar com o mouse (objeto com fisica)?
» Como fazer a imagem rotacionar para um certo lado se clicarmos num certo objeto?
» Física do bloco-Ajuda
» Preciso de ajuda em fisica
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos