Arcticfoxer
发表于 2020-10-19 10:15:02
准备学了20讲回来再看看,也是不太明白move那里怎么带的参数
siven-siven
发表于 2020-10-26 21:00:10
concrete 发表于 2016-5-17 09:56
nonlocal 将 pos_x和pos_y声明为全局变量,(全局变量越少越好,必要的全局变量放在最开始,如legal_x和l ...
我的理解是通过Move = creat( ),这样变量赋值,creat()函数就多了一个move标签,函数就不会被释放,所以函数的变量就会永远保存,起到了全局变量的作用。
siven-siven
发表于 2020-10-26 21:01:30
拂袖明灯 发表于 2016-10-3 09:00
为什么我就直接复制过去运行还会报错啊
SyntaxError: multiple statements found while compiling a singl ...
直接复制会有换行错误
siven-siven
发表于 2020-10-26 21:26:15
我的理解:在这个例子中,我们始终需要在内存中保存一个最新的位置坐标,但有不希望以全局变量的形式存在。所以就在一个函数内在构造一个内函数,这样外函数的变量就起到了全局变量的作用。内函数完成坐标更新的功能。更新后的结果以外函数的“全局变量”,永久保存在内存中。
siven-siven
发表于 2020-10-26 21:39:12
28行:return moving
我理解是:返回了一个函数的地址,这样才有机会把内函数的参数传递进去。如果是return moving(),那返回的就是内函数的返回值了,也就是没有入口把内函数的参数传递进去了。
羽翮
发表于 2020-11-2 16:18:21
{:10_266:}这个判断是否超出边界是不是得用循环体哇?
15909574023
发表于 2020-11-17 13:19:05
不懂
tunshi
发表于 2020-11-20 19:32:21
学到了学到了
斌小白
发表于 2020-12-4 08:51:05
求素材
564070598
发表于 2020-12-5 10:40:49
想着未来可以做成这样的效果,这也很厉害了
Tihool
发表于 2020-12-14 21:28:33
回复
skinacc
发表于 2021-1-2 12:09:44
请问为什么是 return moving?而不是 return moving()
v.ki
发表于 2021-1-5 16:05:11
看不懂的伙伴们可以把它形象成一个类,只不过比类占有了更少的空间,没有了复杂的魔方方法,每定义一次就相当于实例化一个类,
kpcjames
发表于 2021-1-14 22:32:57
完全看不懂啊
cpj0036
发表于 2021-1-20 17:28:59
小甲鱼没玩过贪吃蛇吗?应该从一边穿出边界,从另一边(对称点)穿进边界,而不是从0坐标穿进去,也有可能是小甲鱼马虎了。
把减数和被减数搞反了,修改下:
# 检查移动后是否超出x轴边界
if new_x < legal_x:
pos_x = (new_x - legal_x) - legal_x
elif new_x > legal_x:
pos_x = (new_x - legal_x) - legal_x
else:
pos_x = new_x
pos_y也要这么修改,过程略
但你确定这种实现方式严谨吗,如果游戏人物出现了闪现技能,闪出地图边界永远就回不来了(如果闪现超过200距离)。我认为正确的算法应该是利用取余,-100到100定义为主值区间,超越主值区间的应该折算到主值区间中。
cpj0036
发表于 2021-1-20 17:32:20
siven-siven 发表于 2020-10-26 21:26
我的理解:在这个例子中,我们始终需要在内存中保存一个最新的位置坐标,但有不希望以全局变量的形式存在。 ...
不能说是永久,不是无懈可击的,你的程序中不能出现第二次
move = create()
否则角色位置就会被初始化了,这是从外部改变内部的最简单的方法
鱼要动动脑子
发表于 2021-1-26 21:45:05
{:10_251:}
yuyoubin
发表于 2021-2-6 18:51:13
good
htyj0
发表于 2021-3-14 20:23:41
原来学了还以为闭包只是一个数据操作机制,没什么用。从这个例子清晰地看到它可以有效的保护变量,防止滥用。
刘三胖
发表于 2021-3-16 00:09:57
移动距离超过301就有逻辑错误了