友情提示:380元/半年,儿童学编程,就上码丁实验室。
做到上一次课,我们就发现了,整个的程序已经很像样了。
能够完成的功能有:
1、移动snake
2、随机产生apple
3、snake和apple能够形成数据关联,判断吃掉的动作
4、通过3#的判断结果,可以实现加分动作
5、完成了snake和apple的显示范围限制
可以说,这已经是一个挺完整的小游戏了,对吧。
比如,贪吃蛇是一个每吃一个apple,就会增加一格长度的。
再比如,屏幕上有很多内容都是同时显示的,如果频繁清除屏幕,那么屏幕就会不停的闪。
我们今天解决屏闪的问题。
注意,讨论的细节只是一种解决方式,而不是最好的方法!
程序做到这里,会发现,整个程序当中的屏显模块,多达好几个。
我们一定要注意的是,在这个程序中,哪些是要清屏的,哪些是不用的。
这里有一个要领,
每当开始产生新数据之前,要清屏一次。
我们看一下之前的程序,别看那么多模块,关键性的数据全面刷新的触发条件,其实只有一个,如下图:
当我们按下某个按键的时候,整个程序的数据,会全面刷新一次。
这时候进行清屏,而其他所有的模块都不清屏,屏幕上显示的就会是最新的数据呈现。
这个是个细节,看着好像很简单,但这却是很多朋友在实际操作中给我消息留言的一个很关键的点。“屏幕为什么老是闪?为什么有些东西显示不出来?……”
我们要搞清楚整个程序的每一个流程部分的功能和逻辑。
每个动作,都是有触发条件的。
一定要明确这个触发条件在哪里,有可能是一个操作,也有可能是一种数据变化后产生的逻辑。
既然整个程序数据刷新的出发条件在这里,那么整个屏幕刷新的动作自然也应该是由这个点来触发的。
但如上文所说,这样做完后,虽然效果可能会有所体现,但绝对不是最好的解决方式。
例如,程序按照做到现在的阶段,有很多固定不动的点,也会因为每一次的屏幕刷新而闪烁。那么如何解决这个问题呢?
这就需要我们之后进一步来理解屏显问题了。
我们的显示模块的清除功能,是清除整个屏幕上显示的内容的。
那可不可以只清除需要清除的部分,而保留不需要清除的部分呢?
这个问题,我们后面再来优化和思考。
这里还会产生一个问题,就是,能否只用一个显示模块,吧所有数据都显示上去呢?
同样我们下周接着来思考和解决这个问题。
下次见!