GMS2 绘制score出现重影

参考教程Space Rocks - DnD遇到了问题,在游戏结束时输出分数会出现重影的问题。

经过测试,跟注释是中文还是英文无关,而且即使是空注释,分数值也会重影。这里采用的是DND模式,涉及Set ScoreDraw Instance Score。我尝试用Draw Value来代替Draw Instance Score,首先用Assign Variable测试变量。

这里有两个值得注意的变量,一个是Built-in的score,另一个是__dnd_score。经过测试,__dnd_score就是Set ScoreDraw Instance Score中的Score,对__dnd_score使用Assign Variable和直接使用Set Score的效果是相同的;同理,对__dnd_score使用Draw Value和直接使用Draw Instance Score的效果是相同的。这个变量是对于一个实例而言的变量。而另一个变量score是什么呢?在帮助文档中可以找到如下说法。

This variable is global in scope and is used to hold a numeric value which is usually used for the game score. This variable is only designed to support legacy projects from previous versions of GameMaker and should not be used in new projects as it may be deprecated in the future.

score是一个老版本的全局变量,未来会被淘汰,强烈不建议使用。
回到重影的问题上来。如果删除Draw Instance Score则直接不绘制分数,如果加回来则重影。说明这一句绘制了两次?也有不重影的情况,仅当分数为0时绘制不重影。

我又尝试了自定义一个实例变量Myscore,修改它的值,绘制它,结果也出现了重影!看来问题并不出在变量身上。
接下来我对于没有出现重影的绘制语句添加一个常量值,发现没有重影。下图我绘制的值是“20”。

然后我将这个值改为变量__dnd_score,重影出现了!

所以问题也不是在某条绘制语句上,而是当绘制的值为变量时(且变量值不为0时)会出现重影。
但是在游戏进行中,也就是处于rm_game的时候绘制分数并不会出现重影。

难道是room的问题?我来到rm_gameover,发现了一个问题。房间里有一个obj_game变量!

问题在于,我之前设置了obj_game为"Persistent"类型,所以只需要在第一个房间中保留一个obj_game实例,而现在rm_gameover房间中还有一个obj_game实例,所以出现了两个实例,导致了重影!删除这个实例后,重影终于消失了!

posted @ 2020-07-12 13:04  平静的雨田  阅读(277)  评论(0编辑  收藏  举报