2015-04-13 4 views
0

Я работаю над игрой с Gamemaker: Studio и столкнулся с немного раздражающей проблемой, когда спрайт игрока не меняется. Я хотел бы получить обратную связь как можно скорее. Справа «игрока», который не меняется, - spr_playerboom. Идея состоит в том, что тогда, когда игрок попадает на Z, спрайт изменится.Confusing Sprite не изменится

image_speed = 0.2; 

var zpress = keyboard_check(ord('Z')); 
var rkey = keyboard_check(vk_right); 
var lkey = keyboard_check(vk_left); 
var jkey = keyboard_check(vk_space); 

if(zpress){ 
sprite_index = spr_playerboom; 
} 

//Check for ground 
if(place_meeting(x, y+1, obj_floor)){ 
vspd = 0; 

//Jumping 
if(jkey){ 
vspd = -jspd; 
} 
} else { 

//Gravity 
if(vspd < 10){ 
vspd += grav; 
} 

} 

//Moving right 
if(rkey){ 
hspd = spd; 
sprite_index = spr_playerwalkright; 
} 

//Moving left 
if(lkey){ 
hspd = -spd; 
sprite_index = spr_playerwalkleft; 
} 



//Check for not moving 
if((!rkey && !lkey) || (rkey && lkey) || (!zpress)){ 
hspd = 0; 
sprite_index = spr_playerstand; 
} 


//Horizontal Collision 
if(place_meeting(x+hspd, y, obj_floor)){ 
while(!place_meeting(x+sign(hspd), y, obj_floor)){ 
    x+=sign(hspd); 
} 
hspd = 0; 
} 

//Moving Horizontally 
x += hspd; 




//Vertical Collision 
if(place_meeting(x, y+vspd, obj_floor)){ 
while(!place_meeting(x, y+sign(vspd), obj_floor)){ 
y+=sign(vspd); 
} 
vspd = 0; 
} 
//Moving Vertically 
y += vspd; 
+0

Кто-нибудь готов помочь ? – Chemay

ответ

0

Позволяет удалить код, который не требуется для спрайта. Таким образом, результат будет:

var zpress = keyboard_check(ord('Z')); 
var rkey = keyboard_check(vk_right); 
var lkey = keyboard_check(vk_left); 

if (zpress) 
    sprite_index = spr_playerboom; 

if (rkey) 
    sprite_index = spr_playerwalkright; 

if (lkey) 
    sprite_index = spr_playerwalkleft; 

if ((!rkey && !lkey) || (rkey && lkey) || (!zpress)) 
{ 
    sprite_index = spr_playerstand; 
} 

Так что это ошибка. Где? Первые три условия просты и противоречивы. Таким образом, вам нужно увидеть последнее условие.

(!rkey && !lkey) || (rkey && lkey) || (!zpress) 

его среднее если (both left and rigth keys is not pressed) или (both left and right keys is pressed) или (z key is not pressed). Так что если вы нажали Z, но не нажимается rkey + lkey, спрайт изменится spr_playerstand и т.д.

(((!rkey and !lkey) or (rkey and lkey)) and (!zpress)) 

в этом случае, когда Z нажата, то спрайт не изменится spr_playerstand

+0

Большое вам спасибо, я не могу поверить, что это было такое простое решение! :) – Chemay

Смежные вопросы