猪猪夏目转黄鹂 发表于 2020-2-16 14:30:16

oMakero 发表于 2015-2-2 16:40
一边画图一遍理解,自己动手再写一遍,现在感觉好简单。。通过这个实例,我发现闭包的一个好处就是,每次调 ...

求助:
我发现闭包的一个好处就是,每次调用内部函数,都会从上一次的运行结果的基础上进行叠加。。
-----为啥闭包会在上一次的运行结果的基础上进行叠加?这个逻辑没搞懂{:10_269:}

镜花水月· 发表于 2020-2-17 11:33:45

看是能看懂,就不知道到时候自己写的时候能不能写出来。。。得多练

1815702237 发表于 2020-2-23 19:40:29

我看完怎么感觉我之前的课都白上了。。。

fengyunkuang 发表于 2020-2-25 10:37:59

不太懂为什么creat()要设置默认值

lcacxj1314 发表于 2020-2-26 01:20:11

move怎么重新被赋值

bananatree 发表于 2020-2-28 17:11:10

嘿嘿我明白了,最后那个改成
move = create
print('向右移动10步后,位置是:', move()(, 10))
也是一样的

zpqm1937 发表于 2020-2-28 18:17:50

1 、第27、28行 return 将值返回去哪了
2、能不能直接把值返回给create
3 、return moving 和 return moving()有什么区别

恳请大佬帮忙{:10_254:}

714536074 发表于 2020-2-28 22:18:20

能看明白,但是对于闭包问题,还是没太明白。

Fate命运枷锁 发表于 2020-2-29 16:16:46

1

xiangyuebj 发表于 2020-2-29 22:18:17

legal_x = [-100, 100]# x轴的移动范围
legal_y = [-100, 100]# y轴的移动范围

向上移动130步后的位置,move(, 130))

new_x = pos_x + direction * step
new_y = pos_y + direction * step

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

      if new_x < legal_x:
            pos_x = legal_x - (new_x - legal_x)
      elif new_x > legal_x:
            pos_x = legal_x - (new_x - legal_x)
      else:
            pos_x = new_x
new_x > legal_x:
0 > -100

pos_x = legal_x - (new_x - legal_x)
pos_x = (100) - (0-100)
pos = 200

      if new_y < legal_y:
            pos_y = legal_y - (new_y - legal_y)
      elif new_y > legal_y:
            pos_y = legal_y - (new_y - legal_y)
      else:
            pos_y = new_y

new_y > legal_y
130 > 100
pos_y = legal_y - (new_y - legal_y)
pos_y = 100 -(130-100)
pos_y = 70


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


233倔强不秃 发表于 2020-3-2 09:01:58

第三遍,懂了!

dudaguo 发表于 2020-3-3 09:49:26

努力求索中

nbhzszb 发表于 2020-3-8 22:01:12

本帖最后由 nbhzszb 于 2020-3-8 22:06 编辑

路过,学习中

fitnesssky 发表于 2020-3-9 13:25:51

頭暈了!!
只能硬的頭皮看@@

不应该衣服 发表于 2020-3-10 12:17:42

明白了nonlocal的用法,和global是真的很相似;检查是否超出边界那里可能可以搞个循环,然后符合条件就break,万一有傻子移动了10000步,哈哈哈哈。看到评论区已经有仁兄做了。

eeeqweasdfff 发表于 2020-3-10 14:36:24

本来听的云里雾里不懂闭包有什么用,现在看了这个代码知道闭包可以拿来保护数据,有那么一点理解了,这样做了外部函数的坐标信息在整个程序里就无法被修改,在生成一个值后就只能进行移动而无法更改坐标。

言言的爸爸 发表于 2020-3-10 20:10:29

反而这个我看懂了!!!!前面20节练习题 反而还看的懵懂 懵懂!!!

yan5782037 发表于 2020-3-11 21:48:18

越界了就往回走 move【1,0】 相当于坐标系x=1,y=0 向右移 step 就是移动多少步

wangwei_454 发表于 2020-3-13 15:18:23

yu_wind 发表于 2014-1-11 16:22
请问
if new_x < legal_x:
            pos_x = legal_x - (new_x - legal_x)


因为移动超出边界的时候,不会一直固定在边界,而是会在边界反弹。比如说边界时-100,你移动到-105,但实际上反弹了,位置应该时-95。所以是一个动态指。

沫颜之瞳 发表于 2020-3-17 15:23:46

看不懂啊,最后在外部函数调用内部函数就算闭包的意思吗?
页: 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25
查看完整版本: 游戏中的角色移动:闭包(closure)在实际开发中的作用