鱼C论坛

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

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

    [复制链接]
发表于 2020-2-16 14:30:16 | 显示全部楼层
oMakero 发表于 2015-2-2 16:40
一边画图一遍理解,自己动手再写一遍,现在感觉好简单。。通过这个实例,我发现闭包的一个好处就是,每次调 ...

求助:
我发现闭包的一个好处就是,每次调用内部函数,都会从上一次的运行结果的基础上进行叠加。。
-----为啥闭包会在上一次的运行结果的基础上进行叠加?这个逻辑没搞懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 11:33:45 | 显示全部楼层
看是能看懂,就不知道到时候自己写的时候能不能写出来。。。得多练
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 19:40:29 | 显示全部楼层
我看完怎么感觉我之前的课都白上了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 10:37:59 | 显示全部楼层
不太懂为什么creat()要设置默认值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 01:20:11 | 显示全部楼层
move怎么重新被赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 17:11:10 | 显示全部楼层
嘿嘿我明白了,最后那个改成
move = create
print('向右移动10步后,位置是:', move()([1, 0], 10))
也是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 18:17:50 | 显示全部楼层
1 、第27、28行 return 将值返回去哪了
2、能不能直接把值返回给create
3 、return moving 和 return moving()有什么区别

恳请大佬帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 22:18:20 | 显示全部楼层
能看明白,但是对于闭包问题,还是没太明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 16:16:46 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 22:18:17 | 显示全部楼层
legal_x = [-100, 100]  # x轴的移动范围
legal_y = [-100, 100]  # y轴的移动范围

向上移动130步后的位置,move([0, 1], 130))
new_x = pos_x + direction[0] * step
new_y = pos_y + direction[1] * step

new_x = 0 + 0*130
new_y = 0 + 1*130
new_x = 0
new_y = 130
        if new_x < legal_x[0]:
            pos_x = legal_x[0] - (new_x - legal_x[0])
        elif new_x > legal_x[1]:
            pos_x = legal_x[1] - (new_x - legal_x[1])
        else:
            pos_x = new_x
new_x > legal_x[0]:
0 > -100

pos_x = legal_x[1] - (new_x - legal_x[1])
pos_x = (100) - (0-100)
pos = 200
        if new_y < legal_y[0]:
            pos_y = legal_y[0] - (new_y - legal_y[0])
        elif new_y > legal_y[1]:
            pos_y = legal_y[1] - (new_y - legal_y[1])
        else:
            pos_y = new_y

new_y > legal_y[1]
130 > 100
pos_y = legal_y[1] - (new_y - legal_y[1])
pos_y = 100 -(130-100)
pos_y = 70


以上我根据自己的逻辑运算出来的,可能是我哪里没有理解透侧,得出来的结果和python运算出来的结果不一样
实际运算出来的结果是 向上移动130步后,位置是: (10, 70)
请论坛大神指点迷津


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 09:01:58 | 显示全部楼层
第三遍,懂了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 09:49:26 | 显示全部楼层
努力求索中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 22:01:12 | 显示全部楼层
本帖最后由 nbhzszb 于 2020-3-8 22:06 编辑

路过,学习中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 13:25:51 | 显示全部楼层
頭暈了!!
只能硬的頭皮看@@
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 12:17:42 | 显示全部楼层
明白了nonlocal的用法,和global是真的很相似;检查是否超出边界那里可能可以搞个循环,然后符合条件就break,万一有傻子移动了10000步,哈哈哈哈。看到评论区已经有仁兄做了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 14:36:24 | 显示全部楼层
本来听的云里雾里不懂闭包有什么用,现在看了这个代码知道闭包可以拿来保护数据,有那么一点理解了,这样做了外部函数的坐标信息在整个程序里就无法被修改,在生成一个值后就只能进行移动而无法更改坐标。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 20:10:29 | 显示全部楼层
反而这个我看懂了!!!!前面20节练习题 反而还看的懵懂 懵懂!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 21:48:18 | 显示全部楼层
越界了就往回走 move【1,0】 相当于坐标系x=1,y=0 向右移 step 就是移动多少步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 15:18:23 | 显示全部楼层
yu_wind 发表于 2014-1-11 16:22
请问
if new_x < legal_x[0]:
            pos_x = legal_x[0] - (new_x - legal_x[0])

因为移动超出边界的时候,不会一直固定在边界,而是会在边界反弹。比如说边界时-100,你移动到-105,但实际上反弹了,位置应该时-95。所以是一个动态指。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 15:23:46 | 显示全部楼层
看不懂啊,最后在外部函数调用内部函数就算闭包的意思吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 12:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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