1
另一个pygame问题。我试图在屏幕上形成一个正方形的移动方块。它的工作正常:首先它下降,然后它转向右侧,然后它开始上升,然后离开,但是当它到达它应该下降的点时,它就没有,而是继续前进并退出屏幕。这就是我认为是相关的部分角色不会改变方向,因为它应该是
import pygame
from pygame.locals import *
from render import *
from player import *
import sys
pygame.init()
class collisions():
square1x = 50
square1y = 60
direction1 = "down"
vel1y = 0
vel1x = 0
square2x = 0
square2y = 0
direction2 = -1
square3x = 0
square3y = 0
direction3 = -1
square4x = 0
square4y = 0
direction4 = -1
square5x = 0
square5y = 0
direction5 = -1
green = pygame.Color(0,255,0)
def hitbox():
red = pygame.Color(255,0,0)
time = 1000/50
playerhb = pygame.rect.Rect(playerObj.x, playerObj.y,20,20)
if collisions.square1x < 40:
collisions.direction1 = "down"
if collisions.square1y > 200:
collisions.direction1 = "right"
if collisions.square1x > 600:
collisions.direction1 = "up"
if collisions.square1y < 50:
collisions.direction1 = "left"
if collisions.direction1 == "down":
collisions.vel1y = 0.02*time
collisions.vel1x = 0
if collisions.direction1 == "right":
collisions.vel1x = 0.02*time
collisions.vel1y = 0
if collisions.direction1 == "up":
collisions.vel1y = -0.02*time
collisions.vel1x = 0
if collisions.direction1 == "left":
collisions.vel1x = -0.02*time
collisions.vel1y = 0
collisions.square1x = collisions.square1x+collisions.vel1x
collisions.square1y = collisions.square1y+collisions.vel1y
enemy = pygame.rect.Rect(collisions.square1x,collisions.square1y,20,20)
draw(enemy,playerhb)
if enemy.colliderect(playerhb):
pygame.quit()
sys.exit()
pygame.display.flip()
忽略所有其他方坐标和方向,我打算让更多的平方左右移动屏幕上。
可能是因为你的第一块“if”应该使用“elif”来代替。这里可能发生的是,你的最后一个if会覆盖掉下的决定,因为y坐标仍然低于向左的阈值。 –
这没有奏效,现在它也不会左转。我也尝试了不同的elif组合,即检查x坐标有1 if和1 elif,但是这也导致它们只是在不同的边上离开屏幕。奇怪的。 – Arcticcu
一旦collisions.square1y低于50,没有别的改变这一点。因此,if序列将始终从collisions.direction1 ==“left”开始。不过,该解决方案并非简单地使用elif。在这种情况下,因为没有任何东西会造成碰撞。square1x大于40,它总是会“向下”... – ndvo