- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Python/PyGame 中的定时事件有疑问。我正在制作一个 2D 横向卷轴平台游戏,目标是接触所有敌人,在收集完所有敌人后,我希望相机中心位于“导出区”。
在相机以“Exit Block”为中心后,我想移除它周围的 block ,然后居中相机回到播放器上。这样玩家就可以看到周围的方 block 被移除并且可以到达“退出 block ”。
在收集完所有敌人后,我得到了以“导出 block ”为中心的代码,但是在移除周围的方 block 之前摄像机切换到播放器。镜头对准播放器后,方 block 将被移除。
我在这里遗漏了关键部分。我试过 pygame.time.wait()周围的方 block 被移除后。有什么帮助吗?请告诉我代码是否我提供的还不够。
编辑:我将我的主要游戏循环分解为:
level.handle_events(pygame.event.get())
level.update()
level.render(screen)
pygame.display.flip()
问题可能是,主循环处理 USEREVENT,之后相机更新,并且只有之后绘制完成,这就是为什么看不到周围 block 的移除?但我仍然不知道如何进行..
相关代码:
玩家初始化:
self.EXITBLOCKCLEAR = pygame.USEREVENT + 1
玩家的碰撞检测:
for e in enemies_group:
if pygame.sprite.collide_rect(self, e)
if len(enemies_group) == 0:
self.exit_block_reveal = True
pygame.time.set_timer(self.EXITBLOCKCLEAR, 3000)
关卡更新:
if self.player.exit_block_reveal == False:
self.camera.update(self.player) # camera follows player
else:
self.camera.update(self.exit_block) # camera centered on "exit block"
Level 的事件处理:
if event.type == self.player.EXITBLOCKCLEAR:
if self.player.exit_block_reveal == True:
for block in self.disappearing_block_group:
block.kill()
self.disappearing_block_group.remove(block) # remove the surrounding blocks
if len(self.disappearing_block_group) == 0: # when blocks are removed, center camera back to player
self.player.exit_block_reveal = False
最新编辑:让代码工作
我试了一下,我让它按我想要的方式工作。这现在非常适合我。
更新的代码(这些是对原始代码的唯一更改)
使用此代码,当我收集到最后一个敌人时,相机移动到“退出方 block ”3 秒,周围的方 block 被移除,再过 3 秒后相机回到玩家中心。
关卡初始化:
self.i = 0
Level 的事件处理:
if event.type == self.player.EXITBLOCKCLEAR:
for block in self.disappearing_block_group:
block.kill()
self.disappearing_block_group.remove(block)
if len(self.disappearing_block_group) == 0 and self.i < 1:
self.i += 1
self.player.exit_block_reveal = True
else:
self.player.exit_block_reveal = False
pygame.time.set_timer(self.player.EXITBLOCKCLEAR, 0) # stop calling USEREVENT
最佳答案
问题是关卡事件处理程序中的 block 清除代码设置,然后重置用于在屏幕实际重绘之前使相机重新居中的开关。一旦事件处理程序看到 exit_block_reveal
为 True
,它开始清除退出 block 。列表 disappearing_exit_group
被清空,函数继续。清除所有 block 的循环后的下一条指令检查是否还有剩余 block -- if len(self.disappearing_block_group) == 0:
。我们知道不会有,因为迭代器刚才把它们都杀了。 if
block 触发,在更新程序知道它更改之前将 exit_block_reveal
设置回 False。
简而言之:碰撞检测器将 exit_block_reveal
设置为 True,但事件处理程序在更新程序查看它之前将其设置回 False。
您的解决方案通过向 block 移除函数添加一个循环来工作,但我认为您可以在没有该附加属性的情况下实现。考虑一下您的事件处理程序的这种修改,其中对 disappearing_block_group
的检查是在 exit_block_reveal
切换之前执行的,而不是之后:
if event.type == self.player.EXITBLOCKCLEAR:
if self.player.exit_block_reveal:
if not self.disappearing_block_group: # disappearing_block_group still has contents at this point, so player.exit_block_reveal won't toggle!
self.player.exit_block_reveal = False
for block in self.disappearing_block_group:
block.kill()
self.disappearing_block_group = list() # ** SEE NOTE **
在此,我所做的只是将 exit_block_reveal
开关移至 disappearing_block_group
真值检查上方。因为该列表仍然有内容,if not self.disappearing_block_group:
直到下一个周期才会运行。此时,列表已被删除(或初始化,如果您重新分配它,如图所示),并且 if
block 运行。由于 disappearing_block_group
中不再有元素,因此 for
block 无事可做,并运行零迭代。
注意:您也可以一次性清除整个列表,而不是删除每个元素。你根本不需要这样做!如果您完全感兴趣,这只是您的一种选择。
希望这对您有所帮助!
关于python pygame - 以set_timer事件为中心的相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19927330/
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: How to align a to the middle of the page 这是一个简单的问题,应该有一个简
我想知道如何在屏幕中央的ListView中生成2个itens。 class _CategoriesState extends State { List categories = ["Anterio
我需要修复 UICollectionView 的一个小问题,当在 6s 设备尺寸上时,我得到如下布局: 但是,我想知道将它们居中以使其成为两条线的最佳方法是什么,或者我应该将它们缩小一点以便可以放置其
我尝试在 UIImageView 中居中 CAShapeLayer 但没有成功,我找到了解决方案,将其(CAShapeLayer)添加到 UIVIew,然后将 UIVIew 添加到 ImageView
一直在从线性布局和相对布局切换,因为我想实现图像的居中。 显示图片:
* { margin:0; padding:0; } /** General Style Info **/ body { background: #003d4c; co
我目前正在尝试修改我在 Wordpress 上的 Royal Slider 插件 (http://dimsemenov.com/plugins/royal-slider/) 我的目标是将所有标题的文本
我已经坚持了一段时间,因此简化了我的要求。当您单击标记时,信息窗口将打开,当用户缩放时,我希望该标记位于 map 的中心。这不起作用,但我认为它很接近: function bindInfoWindow
/* Linked Styles */ body { padding: 0 !important;
这个问题在这里已经有了答案: How do I center floated elements? (12 个答案) 关闭 7 年前。
这个问题在这里已经有了答案: Is there an equivalent to background-size: cover and contain for image elements? (1
我试图让我的页眉停留在页面的中间,不管我在什么窗口大小。 我试过使用 Bootstrap。 StackOverflow 还有这个 CSS。 .section-t
我有一个 1600 像素宽的页面。主要区域虽然只有 900 像素宽。我有一个导航应该固定在页面的中心(它是)。我的问题是当我打开页面时,页面固定在左侧而不是在打开时居中。当用户访问该网站时,我需要做什
我正在尝试找到 View 的中心。对于非旋转 View ,该值是正确的,但对于旋转 View ,它不正确,因为中心 (0,0) 正在旋转。在缩放的情况下,即使缩放后宽度和高度也保持不变 我正在使用以下
预期效果是将 Kartennummer 和 Passwort 集中。 这怎么可能? 我为此使用了一个自定义类: import 'package:flutter/material.dart'; impo
我管理着许多 Maven 项目。他们中的大多数部署到我们的内部 maven 存储库。现在我想开始向 Maven Central 发布一个项目。到目前为止,我有一个父 POM,它指定了我们内部存储库的
我试图锚定两个进展,但我看不到获得预期结果的方法。 我希望左边的进度条固定在左边,右边的条固定在中心固定(如下图所示) (下图显示调整大小的表格) 我尝试将控件放在具有各种 anchor 的停靠面板上
我正在玩 Angular 模态 ui 对话框。我想知道有什么方法可以让它居中?我发现了一个类似的问题: Twitter Bootstrap - Center Modal Dialog 但无法使其工作,
是否可以将值标签放置在条形上,使它们位于条形的中心? 如果我设置条形 align: "center",则条形上的标签将关闭且不居中。 $(function() { var d
http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-s
我是一名优秀的程序员,十分优秀!