【问题标题】:Gamemaker - draw_sprite not functioning as it should with value in data structureGamemaker - draw_sprite 在数据结构中没有发挥应有的作用
【发布时间】:2016-08-21 23:52:34
【问题描述】:

根据我的变量在我的for循环中的位置绘制精灵的代码如下:

for (var i = 0; i <= ds_list_size(Player.buffs) i += 1) {
cuBuff = ds_list_find_value(Player.buffs, i)
if cuBuff == sprite8
draw_sprite (cuBuff, 1, x -148, y -233,)

在我删除 if cuBuff == sprite8 之前,它一直在正常工作

当我这样做时返回错误:

#

致命错误 行动号 1 抽奖事件 对于对象 obj_UIPlayer:

draw_sprite 参数 1 不正确的类型 (5) 需要一个数字 (YYGI32) 在 gml_Object_obj_UIPlayer_DrawEvent_1(第 16 行)- draw_sprite (cuBuff, 1, x -148, y -233,)

#

我不能有这个 if 语句,因为它需要基于 cuBuff 变量进行绘制,它可能不等于“sprite8”

谢谢。

【问题讨论】:

    标签: gml


    【解决方案1】:

    您应该已经发布了有关如何创建和填充列表的更多详细信息。但我假设 Player.buffs 包含精灵索引。您在 for 循环中忘记了分号,您应该使用小于比较器而不是小于或等于。作为额外的保护层,您还应该检查 ds_list_find_value 的返回值是否未定义。

    试试这样的:

    for (i = 0; i < ds_list_size(Player.buffs); i++) {
        cuBuff = ds_list_find_value(Player.buffs, i);
        if (!is_undefined(cuBuff)) {
            draw_sprite(cuBuff, 0, x - 148, y - 233);
        }
    }
    

    【讨论】:

    • 缺少的分号解释了它。我将在发布时添加必要的细节并使用小于而不是小于或等于。感谢您的贡献。
    【解决方案2】:

    你必须先在全局范围内声明一个本地变量 i, 你不能在 if 或循环中声明变量

    var i;
    for (i = 0; i <= ds_list_size(Player.buffs) i += 1) {
    cuBuff = ds_list_find_value(Player.buffs, i)
    if cuBuff == sprite8
    draw_sprite (cuBuff, 1, x -148, y -233,)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多