Game Maker - 鼠标点击image_index检查

时间:2016-06-11 01:12:54

标签: image mouse game-maker

我有这个精灵:spr_meteoriteLv3,它有两个分别为image_index 0和1的子图像。

我有以下对象:obj_meteoriteLv3obj_tempMeteoriteLv3obj_score。对象obj_meteoriteLv3从上面产生随机位置,随机量和随机子图像。对象obj_tempMeteoriteLv3使obj_meteoriteLv3生成。当玩家点击陨石时,程序会检查该对象的image_index值。

obj_meteoriteLv3有以下事件:

创建活动:将sprite_index更改为spr_meteoriteLv3,然后开始向下移动。

左键鼠标事件:销毁self个实例,然后选中image_indeximage_index == 0然后score += 5;别的score -= 5)。

obj_tempMeteoriteLv3有以下事件:

创建事件:将警报0设置为3600,将变量exist设置为1,并将变量add设置为1。

警报0 :将变量add设置为0,并销毁obj_meteoriteLv3实例。

警报1 :将变量exist设置为1。

步骤事件:如果(exist == 1),则(add == 1)然后创建obj_meteoriteLv3的实例,将变量exist设置为0,并设置警报1至10。

obj_score有以下事件:

创建活动:将score设置为0。

绘制事件:绘制score

的值

问题是,无论陨石image_index在点击时有哪个子图像,得分总是会增加5点。就像else条件不起作用一样。我怎样才能解决这个问题?请解释一下你的答案。感谢。

我添加了一些图片以便更好地理解。 Link 1Link 2

2 个答案:

答案 0 :(得分:2)

在obj_meteoriteLv3中, 之前被销毁,它可以执行其余的代码块。移动"销毁实例"到底。

在obj_tempMeteoriteLv3中,两个变量"添加"并且"存在"没有必要,而是 -

创建活动 -

  

闹钟[0] = 3600

     

闹钟[1] = 10

闹钟[0]事件 -

  

destroy_instance

警报[1]事件

  

ob__meteoriteLv3的Create_instance

     

闹钟[1] = 10

答案 1 :(得分:0)

当你点击时,可能会触发每一颗陨石。 在陨石的左键单击事件中,您没有检查光标是否在精灵上。您必须使用position_meeting函数,您将鼠标位置和要点击的实例传递给该函数。 它看起来像是:

if (position_meeting(mouse_x, mouse_y, id))
{
    //your destroy code
}

而且,当instance_destroy();读取行,忽略以下代码,程序跳转到destroy_event。威廉解释得很好并建议改变代码行的顺序,但你也可以直接改变破坏事件中的分数。

我想补充一点,检查每个陨石实例的点击次数并不是最佳选择。

我的建议是使用单个对象来检查点击次数(例如,您的播放器或陨石产生者),在其中检查点击次数,如果触摸了陨石,则会触发咔嗒声。摧毁事件。在这种情况下,你会增加分数并检查精灵。

您的点击事件如下所示:

with (instance_position(mouse_x, mouse_y, obj_meteoriteLv3))
{
    instance_destroy();
}

在陨石毁灭事件中,您将检查image_index并相应地更改分数。

编辑:为什么分数没有改变

我相信您并没有将得分声明为全局变量,而是将其作为实例变量。所以当你写"得分= ..."在另一个对象中,它创建一个与先例无关的新分数变量。

您有两个选择:

1 - 在obj_score的创建事件中将分数声明为全局变量:

  

globalvar得分;
  得分= //您的起始分数

请注意,无法在其初始化线上设置全局变量。

2 - 通过分数对象更改分数:

每当得分必须改变时:

  

obj_score.score = ...