Conectar-se
Quem está conectado
18 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 18 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

ajuda com rotacionar objeto e física

em Ter 19 Maio 2015, 19:12
aew pessoal, já peço desculpas pela falta de conhecimentos, mas por isso estou aki Laughing Laughing

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!!!!
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

Prêmios
   : 0
   : 1
   : 0
Ver perfil do usuário

Re: ajuda com rotacionar objeto e física

em Ter 19 Maio 2015, 20:30
Reputação da mensagem: 100% (1 votos)
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:
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.
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: ajuda com rotacionar objeto e física

em Ter 19 Maio 2015, 23:31
muuuito obrigado!
eu vou testar e te falo o que consegui
vlwwww blz
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: ajuda com rotacionar objeto e física

em Qua 20 Maio 2015, 12:49
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 Happy
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!!!!
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

Prêmios
   : 0
   : 1
   : 0
Ver perfil do usuário

Re: ajuda com rotacionar objeto e física

em Qua 20 Maio 2015, 20:10
Reputação da mensagem: 100% (1 votos)
Opa, que bom, agora que eu percebi, ao inves de usar Motion_add, tente usar motion_set e o resultado deve ser melhor.

@Duca escreveu:caso eu queira que um objeto siga essa rotação... eu tenho como?
Tem sim, basta você linkar a Poison com a plataforma (Cazalbé curtiu isso)

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
Basicamente ele vai pegar como referencia para movimento, o objeto colocado na Room antes dele. Ou seja, na Room, você coloca a plataforma, e logo em seguida coloca a Trap.

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
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: ajuda com rotacionar objeto e física

em Qua 20 Maio 2015, 22:41
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 Happy
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 Suspect )

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
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

mudando de ideia

em Sex 22 Maio 2015, 12:15
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:
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
}}

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



avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

Prêmios
   : 0
   : 1
   : 0
Ver perfil do usuário

Re: ajuda com rotacionar objeto e física

em Sab 23 Maio 2015, 23:36
Reputação da mensagem: 100% (1 votos)
@Duca escreveu:enfim, eu vejo que pouca gente usa physics... tem algum motivo?
Acho que é porque é meio dificil xD

@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”.
Substitua o "physics_apply_local_impulse" por "physics_apply_impulse" ( O Local aplica uma força de acordo com a direção do objeto)

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.

@Duca escreveu:Uma outra coisa... as unicas formas de colisão são aquelas setadas para sólidos? Shape, circulo e Box?
Sim

@Duca escreveu:Eu não consigo fazer ele pegar outra forma, como a mascara?
Você não pode pegar a Mascara, porém você pode criar uma forma diferente usando polígonos.
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

muuuuito BOM!!!!!! Rotacionar com physics (fisica)

em Dom 24 Maio 2015, 17:44
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:
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
Conteúdo patrocinado

Re: ajuda com rotacionar objeto e física

Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum