我有这个精灵:spr_meteoriteLv3
,它有两个分别为image_index
0和1的子图像。
我有以下对象:obj_meteoriteLv3
,obj_tempMeteoriteLv3
和obj_score
。对象obj_meteoriteLv3
从上面产生随机位置,随机量和随机子图像。对象obj_tempMeteoriteLv3
使obj_meteoriteLv3
生成。当玩家点击陨石时,程序会检查该对象的image_index
值。
obj_meteoriteLv3
有以下事件:
创建活动:将sprite_index
更改为spr_meteoriteLv3
,然后开始向下移动。
左键鼠标事件:销毁self
个实例,然后选中image_index
:image_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
条件不起作用一样。我怎样才能解决这个问题?请解释一下你的答案。感谢。
答案 0 :(得分:2)
在obj_meteoriteLv3中, 在 之前被销毁,它可以执行其余的代码块。移动"销毁实例"到底。 p>
在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 = ...