Obrigado por visitar a The Game Makers Brasil Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais. |
3D: como posso detectar a colisão?
- Cambalinho
- Membro
- Reações: 0
- Mensagens: 59
3D: como posso detectar a colisão?
eu ainda estou aprender cada vez mais sobre o Game Maker Studio 1.4, mas ainda estou muito limitado em 3D.
como posso testar a colisão em 3D?
como posso testar a colisão em 3D?
Re: 3D: como posso detectar a colisão?
Olá! Como você está iniciando no game maker, acho útil que você veja estes canais no youtube:
https://www.youtube.com/user/uheartbeast/feed
https://www.youtube.com/channel/UCAumdO1yv-di4fI6IZQIy3Q
https://www.youtube.com/channel/UCOs7Q7IeuzgRyARaEqif75A
https://www.youtube.com/channel/UCJvrLzbg4VPRxzf2vhW7G4A
https://www.youtube.com/channel/UCn7FE3Tx391g1tWPv-1tv7Q
https://www.youtube.com/channel/UCEHvTxm7M3EhrvFB5-_-veQ
São canais muito bons que foi onde eu aprendi muita coisa, mas nunca me interessei em 3D, por isso te passo estes vídeos para tentar te ajudar.
Abraço.
https://www.youtube.com/user/uheartbeast/feed
https://www.youtube.com/channel/UCAumdO1yv-di4fI6IZQIy3Q
https://www.youtube.com/channel/UCOs7Q7IeuzgRyARaEqif75A
https://www.youtube.com/channel/UCJvrLzbg4VPRxzf2vhW7G4A
https://www.youtube.com/channel/UCn7FE3Tx391g1tWPv-1tv7Q
https://www.youtube.com/channel/UCEHvTxm7M3EhrvFB5-_-veQ
São canais muito bons que foi onde eu aprendi muita coisa, mas nunca me interessei em 3D, por isso te passo estes vídeos para tentar te ajudar.
Abraço.
- Cambalinho
- Membro
- Reações: 0
- Mensagens: 59
Re: 3D: como posso detectar a colisão?
eu ja consegui e esta muito fixe ;)
mas ainda tenho problemas devido a variavies :(
posso criar variaveis, num objecto, como o 'x'?
depois eu fazia nomedoobjecto.z ou outra.
se conseguir-se, eu melhorava a função a 100% e com menos argumento.
as variavies globais podem ser alteradas em qualquer lado. mas eu preciso de variavies com valores diferentes entre instancias de objectos
EDIT 1:
eu ao criar variaveis num objecto, eu tenho acesso a elas num script. e isso foi muito bom.
continuando com a colisão, eu fiz outra função:
e
ambas funcionam a 100%.
o 'p' é a expessura do objecto em z.
mas eu tenho 1 problema que não sei controlar. ao andar para a frente e para trás eu altero o 'speed', mas como posso testar o movimento antes de o fazer?
o object tem x,y e z, mas com o 'speed' e direction eu nao sei o que vou somar :(
alguem pode me dar dicas?
EDIT 2:
agora fiz 1 actualização na função:
mas tenho 1 erro:
"___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Keyboard Event for <Up> Key
for object objCamera:
Push :: Execution Error - Variable Get 100000.z(100013, -2147483648)
at gml_Script_Collision3DAllObjects (line 14) - PosZ2=instance_id.z;
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_Collision3DAllObjects (line 14)
called from - gml_Object_objCamera_Key_UP_1 (line 3) - if Collision3DAllObjects(x+cos(direction*pi/180)*diference,y-sin(direction*pi/180)*diference,z+diference,w,h,p)"
"Push :: Execution Error - Variable Get 100000.z(100013, -2147483648)
at gml_Script_Collision3DAllObjects (line 14) - PosZ2=instance_id.z;"
line 14:
mas eu criei o 'z' no objecto... mas que erro eu fiz?
mas ainda tenho problemas devido a variavies :(
posso criar variaveis, num objecto, como o 'x'?
depois eu fazia nomedoobjecto.z ou outra.
Código: Selecionar todos
///Collision3D(PosX1, PosY1, PosZ1, W1, H1, P1, PosX2, PosY2, PosZ2, W2, H2, P2, CollisionDiference);
PosX1=argument0;
PosY1=argument1;
PosZ1=argument2;
W1=argument3;
H1=argument4;
P1=argument5;
PosX2=argument6;
PosY2=argument7;
PosZ2=argument8;
W2=argument9;
H2=argument10;
P2=argument11;
CollisionDiference=argument12;
if ((PosX1 < (PosX2 + W2)) && (PosX2 < (PosX1 + W1)))
{
if ((PosY1 < (PosY2 + H2)) && (PosY2 < (PosY1 + H1)))
{
if ( (PosZ1<(PosZ2+P2)) && (PosZ2<(PosZ1+P1)))
{
return true;
}
}
}
return false;
as variavies globais podem ser alteradas em qualquer lado. mas eu preciso de variavies com valores diferentes entre instancias de objectos
EDIT 1:
eu ao criar variaveis num objecto, eu tenho acesso a elas num script. e isso foi muito bom.
continuando com a colisão, eu fiz outra função:
Código: Selecionar todos
///Collision3D(PosX1, PosY1, PosZ1, W1, H1, P1, PosX2, PosY2, PosZ2, W2, H2, P2, CollisionDiference);
PosX1=argument0;
PosY1=argument1;
PosZ1=argument2;
W1=argument3;
H1=argument4;
P1=argument5;
PosX2=argument6-argument12;
PosY2=argument7-argument12;
PosZ2=argument8-argument12;
W2=argument9+(argument12*2);
H2=argument10+(argument12*2);
P2=argument11+(argument12*2);
if ((PosX1 < (PosX2 + W2)) && (PosX2 < (PosX1 + W1)))
{
if ((PosY1 < (PosY2 + H2)) && (PosY2 < (PosY1 + H1)))
{
if ( (PosZ1<(PosZ2+P2)) && (PosZ2<(PosZ1+P1)))
{
return true;
}
}
}
return false;
Código: Selecionar todos
///Collision3DObjectName(Object1, Object2, CollisionDiference);
PosX1=argument0.x;
PosY1=argument0.y;
PosZ1=argument0.z;
W1=argument0.w;
H1=argument0.h;
P1=argument0.p;
PosX2=argument1.x-argument2;
PosY2=argument1.y-argument2;
PosZ2=argument1.z-argument2;
W2=argument1.w+(argument2*2);
H2=argument1.h+(argument2*2);
P2=argument1.p+(argument2*2);
if ((PosX1 < (PosX2 + W2)) && (PosX2 < (PosX1 + W1)))
{
if ((PosY1 < (PosY2 + H2)) && (PosY2 < (PosY1 + H1)))
{
if ( (PosZ1<(PosZ2+P2)) && (PosZ2<(PosZ1+P1)))
{
var dir=direction*pi/180;
argument0.x += (sin(dir)*4);
argument0.y += (cos(dir)*4);
speed=-10;
return true;
}
}
}
return false;
o 'p' é a expessura do objecto em z.
mas eu tenho 1 problema que não sei controlar. ao andar para a frente e para trás eu altero o 'speed', mas como posso testar o movimento antes de o fazer?
o object tem x,y e z, mas com o 'speed' e direction eu nao sei o que vou somar :(
alguem pode me dar dicas?
EDIT 2:
agora fiz 1 actualização na função:
Código: Selecionar todos
///Collision3DAllObjects(PosX1, PosY1, PosZ1, W1, H1, P1);
PosX1=argument0;
PosY1=argument1;
PosZ1=argument2;
W1=argument3;
H1=argument4;
P1=argument5;
for (i=0;i<(instance_count-1);i++)
{
PosX2=instance_id[i].x;
PosY2=instance_id[i].y;
PosZ2=instance_id[i].z;
W2=instance_id[i].w;
H2=instance_id[i].h;
P2=instance_id[i].p;
if ((PosX1 < (PosX2 + W2)) && (PosX2 < (PosX1 + W1)))
{
if ((PosY1 < (PosY2 + H2)) && (PosY2 < (PosY1 + H1)))
{
if ( (PosZ1<(PosZ2+P2)) && (PosZ2<(PosZ1+P1)))
{
return true;
}
}
}
}
return false;
"___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Keyboard Event for <Up> Key
for object objCamera:
Push :: Execution Error - Variable Get 100000.z(100013, -2147483648)
at gml_Script_Collision3DAllObjects (line 14) - PosZ2=instance_id.z;
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_Collision3DAllObjects (line 14)
called from - gml_Object_objCamera_Key_UP_1 (line 3) - if Collision3DAllObjects(x+cos(direction*pi/180)*diference,y-sin(direction*pi/180)*diference,z+diference,w,h,p)"
"Push :: Execution Error - Variable Get 100000.z(100013, -2147483648)
at gml_Script_Collision3DAllObjects (line 14) - PosZ2=instance_id.z;"
line 14:
Código: Selecionar todos
PosZ2=instance_id[i].z;
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante