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()

忽略所有其他正方形坐标和方向,我打算让更多的正方形在屏幕上四处移动。

4

1 回答 1

0

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

我相信下面的代码将解决更改碰撞方向1的问题。

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"
于 2013-07-12T20:30:41.960 回答