I am new to this community, this is my first post, so "hello world!" (sorry for my english)
Me and my friend are creating an arena style MOBA game for an arcade machine we are currently building, this machine is going to use an 8-way competition joystick.
Therefor I have coded the movement to 4 buttons (WASD) and it uses 8 way movement.
My problem is that I coded all the abilities to work with the built in variable direction (I was using 8 buttons to move before the joystick arrived) and another variable "global.direct" which sets a number for every direction (0-7).
Character information:
Object name: RedRavager
Visible = true
Solid = false
Depth = 0
Persistent = true
Parent = <no parent>
Mask = <same as sprite>
Room information:
Room Speed: 30
This is the code that affects the movement.
In Create:
directionOfPlayerSprite[0]=spr_right; directionOfPlayerSprite[1]=spr_UpRight; directionOfPlayerSprite[2]=spr_up; directionOfPlayerSprite[3]=spr_UpLeft; directionOfPlayerSprite[4]=spr_left; directionOfPlayerSprite[5]=spr_DownLeft; directionOfPlayerSprite[6]=spr_down; directionOfPlayerSprite[7]=spr_DownRight; // Här sätter upp en array för att hålla reda på vilken sprite som skall användas för varje riktning man rör sig i.
in Step:
This is the code for the movement. The variable "Spin" is to track if an ability is activated, if it is, its speed is higher then normal.
if canmove = true //om spelaren har tillåtelse att röra sig (pga av eventuella "stuns" eller "pushbacks".
{
if spin = false // Om spelaren använda Spin attacken eller inte, om han gjör det så ökar speed med 2.
{
//Här använder spelaren inte attacken Spin, därav är hastigheten lägre än i nästa stycke.
vx = (keyboard_check(ord("D")) - keyboard_check(ord("A"))) * 7; // 'ord("D")' = Höger och 'ord("A")' = Vänster. // nummeret '*7;' = speed (Hastigheten man rör sig).
vy = (keyboard_check(ord("S")) - keyboard_check(ord("W"))) * 7; // 'ord("S")' = Nedåt och 'ord("W")' = Uppåt. // nummeret '*7;' = speed (Hastigheten man rör sig).
if (vx != 0 || vy != 0) // Om någon riktnings knapp är nedtryckt.
{
// Sätter rätt spriteanimation för det hållet som spelaren rör sig emot, sätter även animations hastighet.
sprite_index = directionOfPlayerSprite[round(point_direction(
0, 0, vx, vy) / 45) mod 8];
image_speed = 0.4;
if (place_free(x, y + vy)) // Kollar om man kan röra sig i riktningen.
{
y += vy;
}
if (place_free(x + vx, y)) // Kollar om man kan röra sig i riktningen.
{
x += vx;
}
}
else // Om ingen knapp är nedtryckt.
{
image_speed = 0;
}
}
else // När spelaren använder attacken Spin
{
//Här använder spelaren attacken Spin, därav är hastigheten högre än i föregående stycke.
vx = (keyboard_check(ord("D")) - keyboard_check(ord("A"))) * 9; // 'ord("D")' = Höger och 'ord("A")' = Vänster. // nummeret '*9;' = speed (Hastigheten man rör sig).
vy = (keyboard_check(ord("S")) - keyboard_check(ord("W"))) * 9; // 'ord("S")' = Nedåt och 'ord("W")' = Uppåt. // nummeret '*9;' = speed (Hastigheten man rör sig).
if (vx != 0 || vy != 0) // Om någon riktnings knapp är nedtryckt.
{
// Sätter rätt spriteanimation för det hållet som spelaren rör sig emot, sätter även animations hastighet.
sprite_index = directionOfPlayerSprite[round(point_direction(
0, 0, vx, vy) / 45) mod 8];
image_speed = 0.4;
if (place_free(x, y + vy)) // Kollar om man kan röra sig i riktningen.
{
y += vy;
}
if (place_free(x + vx, y)) // Kollar om man kan röra sig i riktningen.
{
x += vx;
}
}
else // Om ingen knapp är nedtryckt.
{
image_speed = 0; // Animationen stannar.
}
}
}Also in step:
This is my attempt to set the direction variables.
if keyboard_check(ord("W")) // Om spelaren rör sig uppåt (rör joysticken uppåt).
{
direction=90; // Variabel för att hålla reda på gradantalet.
global.direct = 0; // Varibel för att hålla reda på riktningen.
if keyboard_check(ord("D")) {direction=45; global.direct = 7;} // Om spelaren rör sig åt Höger och Upp så ändras variablerna till detta.
if keyboard_check(ord("A")) {direction=135; global.direct = 1;} // Om spelaren rör sig åt Vänster och Upp så ändras variablerna till detta.
}
if keyboard_check(ord("S")) // Om spelaren rör sig nedåt (rör joysticken nedåt).
{
direction=270; // Variabel för att hålla reda på gradantalet.
global.direct = 3; // Varibel för att hålla reda på riktningen.
if keyboard_check(ord("D")) {direction=315; global.direct = 5;} // Om spelaren rör sig åt Höger och Nedåt så ändras variablerna till detta.
if keyboard_check(ord("A")) {direction=225; global.direct = 4;} // Om spelaren rör sig åt Vänster och Nedåt så ändras variablerna till detta.
}
if keyboard_check(ord("A")) // Om spelaren rör sig åt vänster (rör joysticken åt vänster).
{
direction=180; // Variabel för att hålla reda på gradantalet.
global.direct = 2; // Varibel för att hålla reda på riktningen.
if keyboard_check(vk_up) {direction=135; global.direct = 1;} // Om spelaren rör sig åt Vänster och Upp så ändras variablerna till detta.
if keyboard_check(vk_down) {direction=225; global.direct = 4;} // Om spelaren rör sig åt Vänster och Nedåt så ändras variablerna till detta.
}
if keyboard_check(ord("D")) // Om spelaren rör sig åt höger (rör joysticken åt höger).
{
direction=0; // Variabel för att hålla reda på gradantalet.
global.direct = 6; // Varibel för att hålla reda på riktningen.
if keyboard_check(ord("W")) {direction=45; global.direct = 7;} // Om spelaren rör sig åt Höger och Upp så ändras variablerna till detta.
if keyboard_check(ord("S")) {direction=315; global.direct = 5;} // Om spelaren rör sig åt Höger och Nedåt så ändras variablerna till detta.
}
The variable direction works for every direction except for Up-Left and Down-Left.
The variable global.direct does not work at all.
Any Ideas?
Please help a swedish nerd! :D











