python - 如何使对象出现在窗口边界的开头(或结尾)(使用pygame)
问题描述
所以我试图在pygame中使用简单的动画和碰撞。我试图让一个矩形出现在开始(或结束)一旦它离开边界,但即使我的方法在处理y坐标,它在x轴上惨遭失败。但是我不太明白为什么。
这是一段可能引起麻烦的代码
def movement():
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_a]:
red_rect.x -= vel
if keys_pressed[pygame.K_d]:
red_rect.x += vel
if keys_pressed[pygame.K_w]:
red_rect.y -= vel
if keys_pressed[pygame.K_s]:
red_rect.y += vel
if (red_rect.x) == 600:
red_rect.x = 0
if red_rect.x == 0:
red_rect.x = 600
if red_rect.y == 600:
red_rect.y = 0
if red_rect.y == -40:
red_rect.y = 600
也有人可以告诉我如何让另一边的部分出现在另一边(矩形不应该立即改变位置,以便过渡更平滑)谢谢您的任何提示或回答
解决方案
不检查坐标是等于 ( ==
) 0 还是 600,而是检查坐标是<
0 还是>=
600:
if (red_rect.x) >= 600:
red_rect.x = 0
if red_rect.x < 0:
red_rect.x = 600
if red_rect.y >= 600:
red_rect.y = 0
if red_rect.y < 0:
red_rect.y = 600
您的代码可以大大简化。pygame.key.get_pressed()
返回一个包含 0 和 1 的数组。使用这些值来计算移动。使用模 ( %
) 运算符计算位置:
def movement():
keys_pressed = pygame.key.get_pressed()
red_rect.x += (keys_pressed[pygame.K_d] - keys_pressed[pygame.K_a]) * vel
red_rect.y += (keys_pressed[pygame.K_s] - keys_pressed[pygame.K_w]) * vel
width, height = 600, 600
red_rect.x = red_rect.x % width
red_rect.y = red_rect.y % height
推荐阅读
- java - 未超出范围时得到 ArrayIndexOutOfBoundException
- python - 在时间增量函数中出现未转换的数据错误
- r - `grid` 图形中的`fontsize` 代表什么?
- java - 在 MongoDB Java 中查询多个匹配字段(使用 find(eq(...))
- c++ - makefile 包含目录
- c++ - 重建“build.ninja”:子命令失败
- laravel - Laravel 帮助台 freescout 无法在 heroku pgsql 上工作
- xampp - XAMPP stackman_launcher 有不同的 IP 地址
- reactjs - 通过反应将 closeModal 从一个组件传递到另一个组件
- mysql - 哪个 DELETE 查询按时间 > CPU > 内存是有效的