Hi,
so ich habe ein Riesen Problem:
Ich programmiere gerade eine Online Engine, die funktioniert soweit auch schon. Beim eigenen Spieler geht sowieso alles(ich sage es deshalb, weil der Code der zum bewegen verwendet wird beim eigenen und anderen Spieler der selbe ist). Eigentlich geht alles: Vorwärts gehen, rückwärts gehen, seitwärts gehen (und schießen). Das Problem: Wenn ich vorwärts + seitwärts, oder rückwärts+seitwärts gehe, fliegt der Spieler sinnlos durch die Gegend (das ganze passiert aber nur bei "anderen" Spielern, also die, die online übertragen werden obwohl der code beim eigenen Spieler gleich ist und es dort einwandfrei funktioniert).
Hier der Code:
Nummer 1.: Das Skript im Spieler (Server/Client ist egal, das ist beides ungefähr gleich und es gibt auch das gleiche problem):
Alles anzeigen
No 2.: "o_server_forward": Wird ausgeführt wenn die "W" Taste gedrückt wird zum senden der Daten.
No 3.:"o_server_sideward" Wird ausgeführt wenn die "A" oder "D" Taste gedrückt wird zum senden der Daten. argument 1 gibt beim empfangen die richtung des seitwärts gehen an.
Alles anzeigen
No. 4: "o_client_rmessage": Das Empfang skript. 1=vorwärts, 2=rückwärts, 3=anhalten, 4 und 5=seitwärts, 6=schießen, 7=direction (wird während des laufens ausgeführt)
Alles anzeigen
Ich hoffe ihr könnt mir helfen, weil mir das Problem unverständlich ist (der selbe code geht ja im offline teil >.<).
Gruß,
ghost
so ich habe ein Riesen Problem:
Ich programmiere gerade eine Online Engine, die funktioniert soweit auch schon. Beim eigenen Spieler geht sowieso alles(ich sage es deshalb, weil der Code der zum bewegen verwendet wird beim eigenen und anderen Spieler der selbe ist). Eigentlich geht alles: Vorwärts gehen, rückwärts gehen, seitwärts gehen (und schießen). Das Problem: Wenn ich vorwärts + seitwärts, oder rückwärts+seitwärts gehe, fliegt der Spieler sinnlos durch die Gegend (das ganze passiert aber nur bei "anderen" Spielern, also die, die online übertragen werden obwohl der code beim eigenen Spieler gleich ist und es dort einwandfrei funktioniert).
Hier der Code:
Nummer 1.: Das Skript im Spieler (Server/Client ist egal, das ist beides ungefähr gleich und es gibt auch das gleiche problem):
Quellcode
- if(keyboard_check(ord('W')) &! keyboard_check(ord('S')) &! keyboard_check(ord('D')) &! keyboard_check(ord('A'))) {direction = image_angle; speed = global.max_speed_forward*fps_based; o_server_turn(1);}
- if(keyboard_check(ord('S')) &! keyboard_check(ord('W')) &! keyboard_check(ord('D')) &! keyboard_check(ord('A'))) {direction = image_angle; speed = global.max_speed_reverse*fps_based; o_server_turn(1);}
- if(keyboard_check(ord('W')) &! keyboard_check(ord('S')) &(keyboard_check(ord('D')) || keyboard_check(ord('A')))) {direction = image_angle; speed = global.max_speed_forward*fps_based; o_server_sideward(1,1);}
- if(keyboard_check(ord('S')) &! keyboard_check(ord('W')) &(keyboard_check(ord('D')) || keyboard_check(ord('A')))) {direction = image_angle; speed = global.max_speed_reverse*fps_based; o_server_sideward(1,1);}
- if(! keyboard_check(ord('W')) && speed > 0) {speed = 0; o_server_stop(1);}
- if(! keyboard_check(ord('S')) && speed < 0) {speed = 0; o_server_stop(1);}
- if(keyboard_check(ord('A')) &! keyboard_check(ord('D'))) {motion_add(image_angle+90,global.max_speed_strafe*fps_bas
- ed);}
- if(keyboard_check(ord('D')) &! keyboard_check(ord('A'))) {motion_add(image_angle-90,global.max_speed_strafe*fps_based);}
- if(keyboard_check_pressed(ord('A')) &! keyboard_check(ord('D'))) {o_server_sideward(1,1);}
- if(keyboard_check_pressed(ord('D')) &! keyboard_check(ord('A'))) {o_server_sideward(1,-1);}
- if(keyboard_check_released(ord('A')) &! keyboard_check(ord('D'))) {o_server_stop(1);}
- if(keyboard_check_released(ord('D')) &! keyboard_check(ord('A'))) {o_server_stop(1);}
- if(keyboard_check_pressed(ord('W')) &! keyboard_check(ord('S'))) {o_server_forward(1);}
- if(keyboard_check_pressed(ord('S')) &! keyboard_check(ord('W'))) {o_server_backward(1);}
No 2.: "o_server_forward": Wird ausgeführt wenn die "W" Taste gedrückt wird zum senden der Daten.
No 3.:"o_server_sideward" Wird ausgeführt wenn die "A" oder "D" Taste gedrückt wird zum senden der Daten. argument 1 gibt beim empfangen die richtung des seitwärts gehen an.
Quellcode
No. 4: "o_client_rmessage": Das Empfang skript. 1=vorwärts, 2=rückwärts, 3=anhalten, 4 und 5=seitwärts, 6=schießen, 7=direction (wird während des laufens ausgeführt)
Quellcode
- var g,d1,d2,d3;
- if receivemessage(sok)>0
- {
- g=readshort()
- if g=1 {speed = readshort()*fps_based; image_angle=readshort() direction = image_angle; o_server_forward(spielernummer+1)}
- if g=2 {speed = readshort()*fps_based; image_angle=readshort() direction = image_angle; o_server_backward(spielernummer+1)}
- if g=3 {speed = 0; x=readshort(); y=readshort() o_server_stop(spielernummer+1)}
- if g=4 {image_angle=readshort(); motion_add(image_angle+90,global.max_speed_strafe*fps_bas
- ed); o_server_sideward(spielernummer+1,1);}
- if g=5 {image_angle=readshort(); motion_add(image_angle-90,global.max_speed_strafe*fps_based); o_server_sideward(spielernummer+1,-1);}
- if g=6 {x=readshort(); y=readshort(); image_angle=readshort(); d=instance_create(x,y,obj_bullet_overall); d.direction=image_angle; d.my_speed=readshort()+16; o_server_shoot(spielernummer+1);}
- if g=7 {image_angle=readshort(); direction=image_angle; o_server_turn(spielernummer+1);}
- }
Ich hoffe ihr könnt mir helfen, weil mir das Problem unverständlich ist (der selbe code geht ja im offline teil >.<).
Gruß,
ghost