鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[扩展阅读] 游戏中的角色移动:闭包(closure)在实际开发中的作用

    [复制链接]
发表于 2017-9-28 15:13:00 | 显示全部楼层
这就是闭包名字的由来??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 10:59:38 | 显示全部楼层
暴击6666的闭包操作!学习学习程序思想!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-15 19:38:09 | 显示全部楼层
这个移动系统应该是走到边界之后继续会往回走。
我想问的是只用一个函数定义能达到效果吗?如果能的话,用闭包这种方式和那种方式有什么优势呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-15 22:51:20 | 显示全部楼层
很好理解呀,就是查看对象移动后是否超出范围,比如说,如果X为[0,100],若移动后为130,则给X赋值为70,若跑动为负数-20,则X为+20,其实坐标就好比以边界做镜像,Y同理;
除此,移动后的位置由direction[0]、[1]确定,X、Y坐标为方向*步数:
只是有点模糊的是,定义的direction,如何分解出的XY:direction[0]、direction[1]。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-23 16:30:04 | 显示全部楼层
我想问下最后的 ; move = create();是什么意思,哪位大神回答一下,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-25 20:09:46 | 显示全部楼层
感谢小甲鱼!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-28 06:09:35 | 显示全部楼层
这里的moving和move是不是笔误???难道Python还能自动识别时态666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-13 16:02:46 | 显示全部楼层
这样会好理解点吧
QQ图片20171213155951.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-14 21:06:22 | 显示全部楼层
多看多学多练,还是能看懂点的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-18 17:36:46 | 显示全部楼层
看懂了,但是也就是仅仅看懂了。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-22 11:13:52 | 显示全部楼层
在这里我终于发现我不是最菜的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-24 17:50:37 | 显示全部楼层
先评论再来看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-1 16:04:25 | 显示全部楼层
我只是想问,这截图是啥游戏呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 14:28:05 | 显示全部楼层
pos_x与pos_y这两个参数是在creat函数中定义的形参,但是又在moving函数中申明这两个参数不是局部变量,因此程序在运行的过程中,第一次先将这两个参数值引用到moving函数中,然后在程序的运行过程中,这两个参数跟随函数的运行结果发生变化的,即不再受creat函数中初始定义值的影响,是否这就是闭包的正解呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-6 10:31:23 | 显示全部楼层
真的有趣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-9 11:54:57 | 显示全部楼层
def add9(x=9):
    def su(m,n):
        nonlocal x
        x=x+10
        return m+n+x
    return su

a=add9()
print(type(a))
print(a(1,2))
print(a(1,2))
print(a(1,2))
a=add9()
print(a(1,2))
print(a(1,2))
print(a(1,2))


所谓用闭包保护位置数据,是不是可以理解为,位置并没有以变量的形式体现出来,只是作为一个过程参数存在,所以没法直接被更改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-12 21:51:27 | 显示全部楼层
请问一下 pos_x=legal_x[0] - (new_x - legal_x[0]) 这个是什么意思呢,如果X的坐标超过了它的范围,会怎么样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 15:52:00 | 显示全部楼层
wenjiew 发表于 2018-1-12 21:51
请问一下 pos_x=legal_x[0] - (new_x - legal_x[0]) 这个是什么意思呢,如果X的坐标超过了它的范围,会怎么 ...

这个是求超过左边范围-100时的情况,超过范围会撞墙往回走,-110走到-100后会返回走-10,所以得-90
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 16:21:55 | 显示全部楼层
move = creat()
print(move())
print(move())
print(move())
这里闭包的作用是避免移动位置重新归零,
即第一次移动(10,0)第二次在第一次基础上移动(10,70),第三次移动后为(0,70)
因为creat()函数中的(pos_x,pos_y)并没有被释放仍然存在,除非move被重新赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-18 18:11:12 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 10:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表