我在做一个关于收集树木和杀死僵尸的游戏。
当我在Map上行走时,树的hitbox不会停留在原地,它们只是随着屏幕移动。
我在试着解决这个问题,但我不知道怎么做。
我是一个Python新手,如果有人能帮助我,我会很感激。
这里是代码。
#imports
import pygame
import random
#window settings
window_size = (600, 600)
window = pygame.display.set_mode(window_size)
#background settings
background = pygame.image.load("Images/Background8.2.png")
background_x = -450
background_y = -450
#camera settings
camera_x = 0
camera_y = 0
#player settings
class Player:
def __init__(self):
self.image = pygame.image.load("Images/Player2.1.png")
self.x_cord = 250
self.y_cord = 250
self.width = 35
self.height = 60
self.velocity = 3
self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)
def tick(self, keys):
global camera_x
global camera_y
if keys[pygame.K_d]:
self.x_cord += self.velocity
self.image = pygame.image.load("Images/Player2.1.png")
camera_x += self.velocity
if keys[pygame.K_a]:
self.x_cord -= self.velocity
self.image = pygame.image.load("Images/Player2.2.png")
camera_x -= self.velocity
if keys[pygame.K_w]:
self.y_cord -= self.velocity
camera_y -= self.velocity
if keys[pygame.K_s]:
self.y_cord += self.velocity
camera_y += self.velocity
if self.x_cord >= 2800:
self.x_cord -= self.velocity
camera_x -= self.velocity
if self.x_cord <= -200:
self.x_cord += self.velocity
camera_x += self.velocity
if self.y_cord <= -200:
self.y_cord += self.velocity
camera_y += self.velocity
if self.y_cord >= 2800:
self.y_cord -= self.velocity
camera_y -= self.velocity
self.hitbox = pygame.Rect(self.x_cord - camera_x + 30, self.y_cord - camera_y + 20, self.width, self.height)
def draw(self):
window.blit(self.image, (self.x_cord - camera_x, self.y_cord - camera_y))
pygame.draw.rect(window, (255, 0, 0), self.hitbox, 2)
class Tree:
def __init__(self):
self.image = pygame.image.load("Images/Tree1.png")
self.x_cord = random.randint(0, 100)
self.y_cord = random.randint(0, 100)
self.width = 50
self.height = 100
self.hitbox = pygame.Rect(self.x_cord + 75, self.y_cord + 125, self.width, self.height)
def tick(self):
self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)
def draw(self):
window.blit(self.image, (self.x_cord - camera_x, self.y_cord - camera_y))
pygame.draw.rect(window, (255, 0, 0), self.hitbox, 2)
#main loop
def game():
player = Player()
run_game = True
trees = []
for _ in range(1):
trees.append(Tree())
while run_game:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit(0)
keys = pygame.key.get_pressed()
for tree in trees:
if player.hitbox.colliderect(tree.hitbox):
quit(0)
window.blit(background, (background_x -camera_x, background_y -camera_y))
for tree in trees:
tree.draw()
player.draw()
player.tick(keys)
pygame.display.update()
if __name__ == "__main__":
game()
字符串
屏幕截图
的数据
的
1条答案
按热度按时间trnvg8h31#
树图像的位置取决于摄像机,因此hitbox的位置也必须取决于摄像机:
字符串