E
Evilspike
Guest
I'm playing around trying to learn I've searched and read around, but i'm not saying i didn't miss something super simple that would fix this so first things first thank you for your time!!
So i have a player object and 2 enemy objects(same object just drug into room twice). What i want to happen is when the enemy runs into the player i want there to be a knock back mechanic. The knock back mechanic works however it applies to both enemy's in the room instead of just the one i hit. I will post the code i'm sure i'm just making a stupid mistake.
//every frame
//gravity
if(!place_meeting(x,y+2,oWall))
{
vspd = vspd + grav;
}
else
{
vspd = 0;
}
y = y + vspd;
//movement
if(!place_meeting(x + sign(hspd), y, oWall))
{
hspd = sign(hspd) * walkspd;
}
else
{
hspd = sign(hspd) * -1;
}
x = x + hspd;
//animation
if(hspd != 0)
{
image_speed = 1;
sprite_index = sEnemyR;
}
//collision with player
if(i)
{
if(oPlayer.hspd > 0)
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (-knockbackforce * sign(oPlayer.hspd));
self.x = self.x + (knockbackforce * sign(oPlayer.hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
else if(oPlayer.hspd < 0)
{ if(hspd < 0)
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (-knockbackforce * sign(hspd));
self.x = self.x +(knockbackforce * sign(hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
else
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (knockbackforce * sign(hspd));
self.x = self.x + (-knockbackforce * sign(hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
}
else
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (knockbackforce * sign(hspd));
self.x = self.x + (-knockbackforce * sign(hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
//clamp the player and enemy so they dont get stuck in walls
oPlayer.x = clamp(oPlayer.x, 31, 782);
oEnemy.x = clamp(oEnemy.x, 31, 768);
oPlayer.hp--;
i = false;
}
as i said it works as intended just on all enemy's at the same time instead of the individual enemy hit.
So i have a player object and 2 enemy objects(same object just drug into room twice). What i want to happen is when the enemy runs into the player i want there to be a knock back mechanic. The knock back mechanic works however it applies to both enemy's in the room instead of just the one i hit. I will post the code i'm sure i'm just making a stupid mistake.
//every frame
//gravity
if(!place_meeting(x,y+2,oWall))
{
vspd = vspd + grav;
}
else
{
vspd = 0;
}
y = y + vspd;
//movement
if(!place_meeting(x + sign(hspd), y, oWall))
{
hspd = sign(hspd) * walkspd;
}
else
{
hspd = sign(hspd) * -1;
}
x = x + hspd;
//animation
if(hspd != 0)
{
image_speed = 1;
sprite_index = sEnemyR;
}
//collision with player
if(i)
{
if(oPlayer.hspd > 0)
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (-knockbackforce * sign(oPlayer.hspd));
self.x = self.x + (knockbackforce * sign(oPlayer.hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
else if(oPlayer.hspd < 0)
{ if(hspd < 0)
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (-knockbackforce * sign(hspd));
self.x = self.x +(knockbackforce * sign(hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
else
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (knockbackforce * sign(hspd));
self.x = self.x + (-knockbackforce * sign(hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
}
else
{
oPlayer.y = oPlayer.y + (-knockbackforce);
oPlayer.x = oPlayer.x + (knockbackforce * sign(hspd));
self.x = self.x + (-knockbackforce * sign(hspd));
oPlayer.walkspd = 0;
alarm[1] = 15;
}
//clamp the player and enemy so they dont get stuck in walls
oPlayer.x = clamp(oPlayer.x, 31, 782);
oEnemy.x = clamp(oEnemy.x, 31, 768);
oPlayer.hp--;
i = false;
}
as i said it works as intended just on all enemy's at the same time instead of the individual enemy hit.