2014-03-12 44 views
0

我正在創建一個字符選擇,它會改變主角的精靈。交換不同房間中的物體的精靈

要做到這一點,我有一個箭頭對象,用戶單擊它來更改主角色的精靈。

global.Mario = true; 
global.PrincessPeach = false; 
global.Luigi = false; 
global.Bowser = false; 

if (mouse_check_button_pressed(mb_left)) { 
    if (global.Mario = true) { 
     Mario = false; 
     PrincessPeach= true; 
    } 

    if (global.PrincessPeach= true) { 
     PrincessPeach = true; 
     Mario = false; 
    } 

    if (global.Luigi = true) { 
     Luigi = false; 
     Bowser = true; 
    } 

    if (global.Bowser = true) { 
     Bowser = false; 
     Mario = true; 
    } 
} 

然後,在我的主要角色,我有一個創建一個事件執行類似下面的代碼:

if (global.Mario = true) { 
    sprite_index = Mario_NotJumping; 
} 

if (global.Luigi = true) { 
    sprite_index = Luigispr; 
} 

然而,當我跑我的遊戲來測試它,我得到以下錯誤:

FATAL ERROR in 
action number 1 
of Create Event 
for object Mario_selection: 

Push :: Execution Error - Variable Get -5.Mario(100000, -1) 
at gml_Object_Mario_selection_Create_0 (line 1) - if (global.Mario = true) { 

目的Mario_selection具有完全相同創建事件和相同的代碼爲主要特徵。向用戶顯示更改。

如果有人能夠幫助我,我對GameMaker相當陌生,所以我有一種感覺,我只是誤解了全局變量。

+0

不確定發生了什麼,但基本上這個錯誤意味着你試圖在初始化之前訪問global.Mario。所以我猜想第二批代碼正在第一批代碼之前運行。屏幕上的兩個對象都是直接的嗎? – PugFugly

回答

0

它看起來像var global.Mario,尚未聲明。在箭頭對象創建事件,

global.Mario = true; 
global.PrincessPeach = false; 
global.Luigi = false; 
global.Bowser = false; 
0

如果我是你,我會保存在一個簡單的變量用戶選擇的「形象」。

添加一些常量;

PLAYER_MARIO = 0; 
PLAYER_PEACH = 1; 
PLAYER_LUIGI = 2; 
PLAYER_BOWSER = 3; 

然後,您可以使用這些常量並將它們保存在全局變量中;

global.player_image = PLAYER_LUIGI; 

然後你可以在你的對象中使用這些;

switch (global.player_image) { 
    case PLAYER_MARIO: 
     sprite_index = Mario_NotJumping; 
     break; 
    case PLAYER_PEACH: 
     sprite_index = Peach_NotJumping; 
     break; 
    case PLAYER_LUIGI: 
     sprite_index = Luigi_NotJumping; 
     break; 
    case PLAYER_BOWSER: 
     sprite_index = Bowser_NotJumping; 
     break; 
} 

你都拿到特定的錯誤是因爲全局變量並沒有在使用時定義。

順便說一下,更好的方法會是這樣的 - 保存所有的精​​靈句柄到特定的變量,然後使用這些。

爲可讀性定義一些常量;

P_LEFT = 0; 
P_RIGHT = 1; 
P_JUMP = 2; 

然後,只要玩家切換角色,

//When the user switches to peach; 
global.player_sprite[P_LEFT] = spr_Peach_Left; 
global.player_sprite[P_RIGHT] = spr_Peach_Right; 
global.player_sprite[P_JUMPING] = spr_Peach_Jumping; 

並覆蓋;

//When the user switches to Luigi; 
global.player_sprite[P_LEFT] = spr_Luigi_Left; 
global.player_sprite[P_RIGHT] = spr_Luigi_Right; 
global.player_sprite[P_JUMPING] = spr_Luigi_Jumping; 

然後,你可以編碼這樣的所有代碼;

if (jumping) { 
    sprite_index = global.player_sprite[P_JUMPING]; 
} else { 
    sprite_index = global.player_sprite[P_LEFT]; 
} 

你明白我的意思嗎?這樣你就不需要遍地開關語句,只需在遊戲開始時將選定的精靈存儲在單個數組中。

然後,您可以對遊戲進行編碼,而不必檢查玩家選擇的播放器圖像。

另外,總是在遊戲開始時定義全局變量。全局變量將永遠存在於遊戲中,每個房間,任何時刻。