鱼C论坛

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

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

    [复制链接]
发表于 2020-2-5 18:28:07 | 显示全部楼层
关于全局变量和闭包,这个视频讲的比较容易理解
https://haokan.baidu.com/v?vid=4 ... thor&type=video
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 00:44:01 | 显示全部楼层
我是真的看懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 21:26:36 | 显示全部楼层
return moving应该变为return moving()吧,要不它返回的就是一个function类型。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 18:11:08 | 显示全部楼层
最后函数的调用有点没搞懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
  1. legal_x = [-100, 100]  # x轴的移动范围
  2. legal_y = [-100, 100]  # y轴的移动范围
复制代码


向上移动130步后的位置,move([0, 1], 130))

  1. new_x = pos_x + direction[0] * step
  2. new_y = pos_y + direction[1] * step
复制代码


new_x = 0 + 0*130
new_y = 0 + 1*130
new_x = 0
new_y = 130

  1.         if new_x < legal_x[0]:
  2.             pos_x = legal_x[0] - (new_x - legal_x[0])
  3.         elif new_x > legal_x[1]:
  4.             pos_x = legal_x[1] - (new_x - legal_x[1])
  5.         else:
  6.             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

  1.         if new_y < legal_y[0]:
  2.             pos_y = legal_y[0] - (new_y - legal_y[0])
  3.         elif new_y > legal_y[1]:
  4.             pos_y = legal_y[1] - (new_y - legal_y[1])
  5.         else:
  6.             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
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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