鱼C论坛

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

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

    [复制链接]
发表于 2018-11-14 16:29:26 | 显示全部楼层
呃。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-16 18:06:29 | 显示全部楼层
还是不太懂闭包到底有什么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-28 13:37:57 | 显示全部楼层
请问为什么不用一个函数去定义这4个变量:
pos_x,pos_y,direction,step
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-28 18:49:55 | 显示全部楼层
有点难懂,慢慢看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-28 19:57:05 | 显示全部楼层
看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-28 23:12:33 | 显示全部楼层
这个如果移到数据太大一样也会超过限定坐标吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 12:31:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-13 06:12:47 | 显示全部楼层
origin = [0,0]
legal_x = [-100, 100]
legal_y = [-100, 100]

def create(position_x=0, position_y=0):
    def moving(direction, step):
        nonlocal position_x,position_y
        new_x = position_x + direction[0] * step
        new_y = position_y + direction[1] * step
        if new_x < legal_x[0]:
            position_x = legal_x[0]#超出边界无法前进
        elif new_x > legal_x[1]:
            position_x = legal_x[1]#超出边界无法前进
        else:
            position_x = new_x

        if new_y < legal_y[0]:
            position_y = legal_y[0]#超出边界无法前进
        elif new_y > legal_y[1]:
            position_y = legal_y[1]#超出边界无法前进

        else:
            position_y = new_y
        return position_x, position_y
    return moving

move = create()
print('向上移动10步', move([0,1],10))
print('向右移动130步', move([1,0],10))
print('向左下移动100步', move([-1,-1],100))
print('向左上动10步', move([-1,1],10))
print('向左移动10步', move([-1,0],10))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2018-12-24 22:13:54 | 显示全部楼层
没看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-25 19:52:28 | 显示全部楼层
好东东,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-26 00:19:43 | 显示全部楼层
其实不用看懂上面的代码,只要move = create()这个函数在,没有释放,每一次执行move都会数据连续性,不会被破坏,不知道这样理解对不对。

我觉的应该没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 13:16:16 | 显示全部楼层
我的理解。。
刚开始用move = create() 调用create() 这个函数 里面没输入任何数值  所以是初始值(0,0)   之后move 就变成了create()里返回的一个函数 moving
之后print 里调用move 就是在使用moving() 在这里就需要输入两个参数  direction 和 step 运行后会返回 pos_x 和 pox_y  
之后再次运行的print 就是再用moving ()  函数,这个时候 没有运行creat( )   所以pos_x 和 pos_y没有初始化 后面继续移动会在移动后的基础上继续移动
要回到原点就 再次运行move = create() 才行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-13 19:38:29 | 显示全部楼层
一看就想关..........感觉这个对我作用不大.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-17 10:16:14 | 显示全部楼层
看是看懂了,就是不会写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-19 17:10:43 | 显示全部楼层
支持小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-20 20:29:31 | 显示全部楼层
啊是大苏打撒旦撒打算打算打算打算重新注册咨询
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-23 16:33:13 | 显示全部楼层
向楼主学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-24 22:03:29 | 显示全部楼层
有点难以理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-28 12:00:08 | 显示全部楼层
没怎么看懂这个逻辑,特别是检查是否超范围那
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 20:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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