请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

微信公众号:
crossincode
 找回密码
 立即加入
楼主: crossin先生

【Pygame 第5课】 游戏中的运动

[复制链接]

1

主题

0

好友

145

积分

注册会员

Rank: 2

发表于 2017-3-5 18:06:46 |显示全部楼层
本帖最后由 brahmagupta 于 2017-3-5 18:19 编辑

crossin老师:
我想问几个问题

1.如何实现“异步”多子弹?
我的想法是在循环中添加一个MouseButtonDown的Event的判断,来让玩家在每次按下鼠标左键的时候都发射一枚子弹。我想到的可以实现的方法只有 提高“载弹量” 。 就是在代码中记录N颗子弹的位置(比如说N=10,就是十颗子弹)然后在检测到“鼠标按下”操作的时候依次绘制这N颗子弹。(我觉得这里子弹可以用之前python基础课中讲的 class 来构造)
但是我觉得这个方法代码上有些臃肿,而且 载弹量必须要事先确定好。 我希望:能实现,每次按下鼠标左键的时候都发射一枚子弹,而且总“载弹量”不确定(示例代码中的载弹量为1,只有在这颗子弹飞出边界的时候才会再次发射。。所以鼠标越靠近上边界射速越快。。。)。就是说我点几次鼠标就发射几颗(可以很多很多,而不是一个确定的数值N),而且这些子弹可以说 可以互不干扰地 “并行” 飞行。(不知道我说清楚没。。)
(就好像C语言中,如果我想要接收一段文字,但不确定他的长度,有没有一种类型的 变量 x或者方法,我可以不用指定这个变量 x的空间大小---例如x[100]这样,给个100单位长度的空间。而是 它接受了多少字符就可以开多少空间。   这种好像在C里没有)

优化问题:
2.如何任意 控制帧率/提高 帧率|画面刷新频率
我好像在之前的教程贴里看到过有人也提出过这个问题。。当时没太在意,现在又找不到了。。。

3.如何解决飞机卡顿问题
我发现,在我仅在您的代码基础上添加了 MouseButtonDown事件来发射子弹 的功能时,在玩的时候有个不好的体验:
在按下鼠标之后的一小段时间(从代码上看应该是 子弹从发射到飞出边界的这段时间),飞机仍然停在按下鼠标的那个位置。。也就是说这段时间
(if event.type==pygame.MOUSEBUTTONDOWN:    绘制飞行的子弹-直到飞出边界为止)飞机是卡住了一样。 我不知道这个怎么解决。
(第三个问题好像和前两个问题有些重复的地方: 不知道怎么样 在代码已经执行到一个if代码块中 的时候,还可以进行这同一个if判断?就好像 我已经 在一个叫做if的坑里了,但是我怎么样在  我还在坑里的时候再跳进来。。。也许这是一个 伪需求。。。)
回复

使用道具 举报

1

主题

0

好友

145

积分

注册会员

Rank: 2

发表于 2017-3-5 18:15:20 |显示全部楼层
因为我是学硬件的,学过verilog这种硬件语言。这种硬件语言可以实现 “时序逻辑”,就是以硬件上的一个元件(比如石英、振荡器啥的)提供的 ”频率“---即”时间“,作为执行代码的依据---有些代码块可以在同一个时间点下一起同时执行。而不是像解释器一样一行一行执行。
不知道有没有高级编程语言有类似的功能啊
回复

使用道具 举报

1

主题

0

好友

145

积分

注册会员

Rank: 2

发表于 2017-3-5 18:17:44 |显示全部楼层
本帖最后由 brahmagupta 于 2017-3-5 18:27 编辑

貌似可以将 ”MouseButtonDown的判断“ 和  ”绘制子弹“ 分开来进行?
并且我又有一个想法是引入 数字逻辑 里面的 ”有限状态机“0.0 来用 状态转移的 思路来解决 "判断和 绘制子弹"的问题。。(然而还没有想清楚。)

回复

使用道具 举报

1

主题

0

好友

145

积分

注册会员

Rank: 2

发表于 2017-3-5 18:29:54 |显示全部楼层
我直接去 编程擂台 开一个帖子跟大家慢慢讨论好了
回复

使用道具 举报

158

主题

37

好友

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-3-6 14:42:35 |显示全部楼层
brahmagupta 发表于 2017-3-5 18:06
crossin老师:
我想问几个问题

1子弹的问题,你只要做成按照你点击发射,而不是自动发射,这个问题就很好解决了。把子弹的销毁和发射分成两件事来做。然后你也可以不回收子弹,每次打出去的,最后从游戏里移除就可以

2 帧率有办法设置降低,但你没办法无限提高帧率,就像老电脑玩游戏帧率就是会很低一样,这是由性能所限。

3 卡顿的问题有可能是代码上实现的不好。另外你说的事件响应和渲染分离,这个很多游戏引擎都是这么做的,只是pygame现在这样写是比较原始的做法
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

发表于 2017-3-13 18:50:06 |显示全部楼层
怎么感觉子弹越射越慢了
回复

使用道具 举报

158

主题

37

好友

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-3-13 20:59:13 |显示全部楼层
saberetoile 发表于 2017-3-13 18:50
怎么感觉子弹越射越慢了

可能帧率下降了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2017-3-27 11:37:45 |显示全部楼层
赞,刚开始学习!
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2017-3-27 11:38:01 |显示全部楼层
学习啦
回复

使用道具 举报

1

主题

0

好友

53

积分

注册会员

Rank: 2

发表于 2017-11-14 23:16:20 |显示全部楼层
本帖最后由 zuojintao 于 2017-11-14 23:18 编辑

谢谢老师
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|Archiver|手机版|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2020-10-24 11:33 , Processed in 0.056014 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部