鱼C论坛

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

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

    [复制链接]
发表于 2022-7-3 16:59:14 | 显示全部楼层
太难了,啥时候能学会啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-6 10:51:40 | 显示全部楼层
闭包有的难哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-8 12:14:48 | 显示全部楼层
有点迷迷

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

使用道具 举报

发表于 2022-7-13 16:40:44 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 23:04:39 | 显示全部楼层
只是演示方法吧,感觉这个边缘的代码好像很容易在墙上鬼畜呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 17:24:11 | 显示全部楼层
yu_wind 发表于 2014-1-11 16:22
请问
if new_x < legal_x[0]:
            pos_x = legal_x[0] - (new_x - legal_x[0])

这里的逻辑是如果走到边界就往回走,你说的逻辑是走到边界就不走了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 17:57:51 | 显示全部楼层
guokai83524 发表于 2014-3-17 13:05
看不懂最后的调用30-33行,为什么move里面可以这样带参数,不理解

move = create() 调用create()函数,返回的是moving的闭包函数,所以move变量实际是一个函数。因此可以对move这个函数传递实参进行调用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 17:58:48 | 显示全部楼层
代码有1处可以优化,另外用对象进行改写。拙作附上。

  1. def get_pos(logic_pos, legal):
  2.     """
  3.     判断逻辑位置是否超出边界,如果超出则后退,返回实际的位置
  4.     :param logic_pos: 走位后的逻辑位置
  5.     :param legal: 列表,包含两个值,画面的边界
  6.     :return: 返回实际的位置
  7.     """
  8.     true_pos = 0
  9.     if logic_pos < legal[0]:
  10.         true_pos = legal[0] - (logic_pos - legal[0])
  11.     elif logic_pos > legal[1]:
  12.         true_pos = legal[1] - (logic_pos - legal[1])
  13.     else:
  14.         true_pos = logic_pos

  15.     return true_pos


  16. class Create:

  17.     def __init__(self, origin=[0, 0]):
  18.         self.pos_x = origin[0]
  19.         self.pos_y = origin[1]

  20.     def moving(self, direction, step):
  21.         legal_x = [-100, 100]
  22.         legal_y = [-100, 100]
  23.         self.pos_x = direction[0] * step + self.pos_x
  24.         self.pos_y = direction[1] * step + self.pos_y

  25.         self.pos_x = get_pos(self.pos_x, legal_x)
  26.         self.pos_y = get_pos(self.pos_y, legal_y)

  27.         return self.pos_x, self.pos_y


  28. new_create = Create()
  29. print(f"向右移动10步后,位置是:{new_create.moving([1,0], 10)} ")
  30. print(f"向上移动130步后,位置是:{new_create.moving([0,1],130)}")
  31. print(f"向左移动10步后,位置是:{new_create.moving([-1,0],10)}")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 07:39:47 | 显示全部楼层
这个游戏和小甲鱼和鱼那个游戏啊好像
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-16 10:50:15 | 显示全部楼层
这个用法对初学者的我来说好像太高端了点。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-1 15:17:10 | 显示全部楼层
学习了学习了,虽然不懂,继续女里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-19 18:01:10 | 显示全部楼层
代码看懂了但还是不明白闭包的用处
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-4 08:55:10 | 显示全部楼层
这个太高端了我怎么一点也看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-30 23:07:34 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 17:40:14 | 显示全部楼层
为什么超出边界要这个运算?
pos_y = legal_y[0] - (new_y - legal_y[0])
没有理由只是想这么做?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-9 17:42:21 | 显示全部楼层
yu_wind 发表于 2014-1-11 16:55
我估计是我没看明白咋么移动的,
我的理解是, x轴上  原来-80 往左挪30  变成-110  然后 if  的结果是-90 ...

你这个解释说得通,撞墙往回走,总结精辟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 17:30:06 From FishC Mobile | 显示全部楼层
原来中间那一坨都是在写撞墙反弹,哭了,看了三遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-18 16:51:34 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 09:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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