人格不像预期那样改变方向

2024-03-29 14:07:28 发布

您现在位置:Python中文网/ 问答频道 /正文

另一个游戏问题。我试着让一个正方形在屏幕上移动,形成一个,嗯,正方形。它工作得很好:先是向下,然后向右,然后开始向上,然后向左,但当它到达应该向下的点时,它根本就没有,而是继续向前,离开屏幕。以下是我认为相关的部分

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

忽略所有其他的方格坐标和方向,我计划让更多的方格在屏幕上移动。你知道吗


Tags: fromimportif屏幕timepygamedownenemy
1条回答
网友
1楼 · 发布于 2024-03-29 14:07:28

“如果”的顺序有问题。不能仅检查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"

相关问题 更多 >