我正在创建一个字符选择,用于更改主角的精灵。
为此,我有一个箭头对象,用户单击该对象来更改主角的精灵。
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 :(得分:0)
看起来像var global.Mario,尚未声明。在箭头对象中创建事件put,
global.Mario = true;
global.PrincessPeach = false;
global.Luigi = false;
global.Bowser = false;
答案 1 :(得分: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];
}
你明白我的意思吗?这样你就不需要在任何地方使用switch语句,只需在游戏开始时将选中的sprite存储在一个单独的数组中。
然后您可以编码游戏而无需检查玩家选择的玩家形象。
此外,始终在游戏开始时定义全局变量。全局变量将始终存在于游戏中,每个房间,任何特定时刻。
答案 2 :(得分:-1)
您应该使用existingEntity.ellipse.semiMinorAxis.setCallback(
this._getRadius.bind(this, circle),
isConst
);
existingEntity.ellipse.semiMajorAxis.setCallback(
this._getRadius.bind(this, circle, 1),
isConst
);
代替。