我正在制作一个关于抢劫的游戏,听起来很棒:)但我有问题。 我的玩家可以向左和向右移动(这很好),在房间的尽头是安全的,但我怎么能警告pygame我在同一区域。 这是另一个问题,当我进去的时候(如果x> player> = x_safe:我把它放在那里(这是非常糟糕的解决方案), 是我需要在安全区域3秒,你会在下面的代码中看到我把
if x>player >= x_safe:
now = time.time()
unlocked = now + 3
if unlocked < now: # WHICH WILL NEVER HAPPEN BECOUSE OF WHILE LOOP
这是代码:
import pygame
import time
import random
pygame.init()
display_width = 800
display_height = 600
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Breaking in")
clock = pygame.time.Clock()
walkRight = [pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R5.png'), pygame.image.load('R6.png'), pygame.image.load('R7.png'), pygame.image.load('R8.png'), pygame.image.load('R9.png')]
walkLeft = [pygame.image.load('L1.png'), pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L5.png'), pygame.image.load('L6.png'), pygame.image.load('L7.png'), pygame.image.load('L8.png'), pygame.image.load('L9.png')]
#bg = pygame.image.load('bg.jpg')
char = pygame.image.load("standing.png")
safe = pygame.image.load("sef.png")
right = False
left = False
walkCount = 0
playerSkin = pygame.image.load("player.png")
guardSkin = pygame.image.load("guard.png")
#guardSkin_flip = pygame.image.load("guard_fliped.png")
#gajbaImg = pygame.image.load("gajba.png")
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
class Background(pygame.sprite.Sprite):
def __init__(self, image_file, location):
pygame.sprite.Sprite.__init__(self) #call Sprite initializer
self.image = pygame.image.load("background.png")
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location
def text_objects(text,font):
textSurface = font.render(text,True,black)
return textSurface,textSurface.get_rect()
def sefplace(x,y):
gameDisplay.blit(safe,(x,y))
#560,336
def message_dispaly(text,size):
largeText = pygame.font.Font("freesansbold.ttf",size)
TextSurf, TextRect = text_objects(text,largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf,TextRect)
pygame.display.update()
time.sleep(2)
game_loop()
#224,365
def guard(x,y):
gameDisplay.blit(guardSkin,(x,y))
def game_loop():
global walkCount
global left
global right
safe_width = 50
safe_height = 51
sef_x = 560
sef_y = 300
player_width = 64
player_height = 64
BackGround = Background("background.png",[0,0])
guard_range = 100
x_player = (20)
y_player = (display_height/2)
x_guard = (650)
y_guard = (display_height/2)
x_change = 0
guard_speed = 1.3
catched = False
while not catched:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
catched = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -2.3
left = True
right = False
elif event.key == pygame.K_RIGHT:
x_change = 2.3
left = False
right = True
if event.key == pygame.K_q:
pygame.quit()
quit()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
right = False
left = False
walkCount = 0
x_change = 0
#458 max
x_guard -= guard_speed
if x_guard < 499:
guard_speed *= -1
guardSkin = pygame.image.load("guard_fliped.png")
elif x_guard > 750:
guard_speed *= -1
if x_player < 5:
x_player = 5
#if x_player > x_guard - guard_range:
#message_dispaly("You got Catched !",65)
gameDisplay.fill([255,255,255])
gameDisplay.blit(BackGround.image,BackGround.rect)
sefplace(sef_x,sef_y)
#guard(x_guard,y_guard)
if left:
gameDisplay.blit(walkLeft[walkCount%3],(x_player,y_player))
walkCount += 1
elif right:
gameDisplay.blit(walkRight[walkCount%3],(x_player,y_player))
walkCount += 1
else:
gameDisplay.blit(char,(x_player,y_player))
x_player += x_change
x_player += x_change
if x_player >= sef_x and x_player:
print("upali smo")
#now = time.time()
#unlocked = now + 4
#print("Ovo je sada " + str(now))
#print("Ovo je otkljucano " + str(unlocked))
#if unlocked < now:
#message_dispaly("Otkljucano",50)
pygame.display.update()
clock.tick(27)
game_loop()
pygame.quit()
quit()
答案 0 :(得分:1)
您可以使用pygame.Rect(x, y, width, height)
定义一个框。
简单的秒表可以用字体对象和时间变量表示。
time = 0
dt = clock.tick(60) / 1000
# In the loop
time += dt
myFont.render(str(round(time, 1)), True, (255, 255, 255))
screen.blit(myFont, (0, 0))
dt代表增量时间,这是将fps转换为实际秒数的好方法。
如果你想在碰撞时检查时间是否为3,那就是一些代码
if myRect.collidepoint(player.pos.x, player.pos.y):
time += dt
if time >= 3:
# Do Stuff