2013-05-28 91 views
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() 

忽略所有其他方坐标和方向,我打算让更多的平方左右移动屏幕上。

+2

可能是因为你的第一块“if”应该使用“elif”来代替。这里可能发生的是,你的最后一个if会覆盖掉下的决定,因为y坐标仍然低于向左的阈值。 –

+0

这没有奏效,现在它也不会左转。我也尝试了不同的elif组合,即检查x坐标有1 if和1 elif,但是这也导致它们只是在不同的边上离开屏幕。奇怪的。 – Arcticcu

+0

一旦collisions.square1y低于50,没有别的改变这一点。因此,if序列将始终从collisions.direction1 ==“left”开始。不过,该解决方案并非简单地使用elif。在这种情况下,因为没有任何东西会造成碰撞。square1x大于40,它总是会“向下”... – ndvo

回答

0

您的“if”序列存在一些问题。您不能仅检查x或y轴以决定是否改变方向。您需要检查两个轴(或者确保在达到目标时方块返回1个像素)。

我相信下面的代码将解决改变collisions.direction1的问题。

if collisions.square1x < 40 and collisions.square1y < 50: 
    collisions.direction1 = "down" 
if collisions.square1y > 200 and collisions.square1x < 40: 
    collisions.direction1 = "right" 
if collisions.square1x > 600 and collision.square1y > 200: 
    collisions.direction1 = "up" 
if collisions.square1y < 50 and collisions.square1x > 600: 
    collisions.direction1 = "left" 
相关问题