2D 数组未正确访问 globalvar (GameMaker)

Posted

技术标签:

【中文标题】2D 数组未正确访问 globalvar (GameMaker)【英文标题】:2D Array not properly accessing globalvar (GameMaker) 【发布时间】:2018-11-01 20:32:29 【问题描述】:

我有一个商店,我正在尝试设置它,调试器内的所有帐户都在触发它,但完全没有做任何事情。

这是我的设置:

o_Shop - 玩家互动以在 room0 内创建一个层

o_Shop_setup - 创建数组,创建事件:

global.inventory[1, 1] = "Mines";               //Item Name
global.inventory[1, 2] = sp_Blue_mine_UI;       //Item Sprite
global.inventory[1, 3] = 50;                    //Cost
global.inventory[1, 4] = MINE_NUMBER;           //Current Inventory
global.inventory[1, 5] = MINE_NUMBER_MAXIMUM;   //Maximum amount

//HE Ammo
global.inventory[2, 1] = "HE Ammo";             //Item Name
global.inventory[2, 2] = sp_ammoHE;             //Item Sprite
global.inventory[2, 3] = 5;                     //Cost
global.inventory[2, 4] = AMMO_AMOUNT;           //Current Inventory
global.inventory[2, 5] = AMMO_AMOUNT_MAXIMUM;   //Maximum amount

然后,我使用以下访问该数组的对象:

o_item_parent - o_shop_Mines/o_shop_AmmoHE 的父级 - o_item_parent 绘制事件内部:

draw_set_font(fnt_small);
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
draw_set_color(c_white);
draw_text(x, y - 100, global.inventory[myid, 1]);
draw_sprite(global.inventory[myid, 2], 0, x, y - 30);
draw_set_color(c_yellow);
draw_text(x, y + 32, string(global.inventory[myid, 3]) + " Coins");
draw_set_color(c_white);
draw_text(x, y + 64, string(global.inventory[myid, 4]) + " / " + string(global.inventory[myid, 5]));

o_shop_Mines - 继承抽奖事件,不做任何更改。

o_shop_Mines 创建活动:

myid = 1;

o_shop_AmmoHE - 继承平局事件而不做任何更改。 o_shop_AmmoHe 创建活动:

 myid = 2;

o_buy_parent - o_buy_Mines/o_buy_ammoHE 的父级 o_buy_parent - 创建事件:

image_speed = 0;
image_index = 0;

o_buy_parent步骤事件:

if (COINS >= global.inventory[myid, 3])

    image_index = 0;    

else

    image_index = 1;    


if (global.inventory[myid, 4] == global.inventory[myid, 5])

    image_index = 1;    

o_buy_parent左按事件:

if (global.inventory[myid, 4] == global.inventory[myid, 5])

    audio_play_sound(snd_gunReload, 1, false);

else if (COINS < global.inventory[myid, 3])

    audio_play_sound(snd_game_over, 1, false);  

else

    //audio play sound snd_purchase_complete
    COINS -= global.inventory[myid, 3];
    global.inventory[myid,4]++;

o_buy_Mines - 从 o_buy_parent 继承 Step Event/Left Pressed Event

o_buy_Mines 内部创建事件:

myid = 1;
event_inherited();

o_buy_ammoHE - 从 o_buy_parent 继承 Step 事件/Left Pressed 事件

o_buy_ammoHE 内部创建事件:

myid = 2;
event_inherited();

o_buy_ammoHE 内部创建事件:

myid = 2;
event_inherited();

o_buy_ammoHE 左按下事件内部:

if (global.inventory[myid, 4] == global.inventory[myid, 5])

    audio_play_sound(snd_gunReload, 1, false);

else if (COINS < global.inventory[myid, 3])

    audio_play_sound(snd_game_over, 1, false);  

else

    //audio play sound snd_purchase_complete
    COINS -= global.inventory[myid, 3];
    global.inventory[myid,4]++; //breakpoint triggers fine, does nothing.
    //Have also tried the below line, doesn't work, but commented out    currently:
    //AMMO_AMOUNT += 5;

ALL CAPS 中的所有变量都是使用 o_init o_initis inside of room -&gt;rm_LoadingScreen` 内部的 globalvar 方法创建的全局变量

rm_LoadingScreen 什么都不做,只是持有这个不是持久的对象,这个对象包含一个 可以改变STATE = GameState(枚举)的switch语句

`STATE = GameState.menu` is called by default which calls
scr_menuLoader();
break;

除商店外,一切正常。它确实昨天工作了,但我无法追踪我坏了什么。目前,代码正在递增一个在屏幕上绘制的数字

draw_text(x, y + 64, string(global.inventory[myid, 4]) + " / " + string    (global.inventory[myid, 5]));

但是 globalvar AMMO_AMOUNT 没有改变。调试器显示它永远不会改变。

谁能提供一些反馈或第二双眼睛?我已经盯着这个看了好几个小时了,我就是看不出有什么问题。

【问题讨论】:

【参考方案1】:

您对 AMMO_AMOUNT 和其他带有大写字母的名称的使用相当于常量,用作初始值。无论如何,似乎 global.inventory[myid,4] 中的价值已经增加。 因此,如果您想更改 AMMO_AMOUNT 的值,您应该明确地进行,就像您在注释行中所做的那样: //AMMO_AMOUNT += 5; 希望大家没有误会评论XD

最后,您的代码应该是这样的: o_buy_ammoHE 左按下事件内部,最后一个 else 块:

else

    //audio play sound snd_purchase_complete
    COINS -= global.inventory[myid, 3];
    global.inventory[myid,4]++; 
    AMMO_AMOUNT = global.inventory[myid,4];

如果它没有帮助,我会认为一切都按预期工作,您只需要在需要的地方使用 global.inventory[myid, 4])。

【讨论】:

以上是关于2D 数组未正确访问 globalvar (GameMaker)的主要内容,如果未能解决你的问题,请参考以下文章

QVectors2D 的 QT OpenGL QList 未正确绘制

使用 Direct2D GdiInteropRenderTarget 未正确呈现 GDI 内容

cocos2d/cmake/Modules/CocosConfigDepend.cmake:94 (endmacro) 的 CMake 错误:流控制语句未正确嵌套

来自数组的 QList 请求项未提供正确的参考

访问动态 2D 字符数组时引发访问冲突异常

使用2d数组写入访问冲突