2016-08-19 69 views
-1

雖然這樣做在python一些測試,在隨機開始複製本身就是一個Player類的精靈之一..我不出來..(我意識到這是probally很簡單的東西)雪碧複製自己..?

下面的代碼:

import pygame 
from pygame.locals import * 
import time 

pygame.font.init() 
myfont = pygame.font.SysFont("mirc", 25) 

screen = pygame.display.set_mode((720, 480)) 
clock = pygame.time.Clock() 

health = 10 

keys = {"w":False, "a":False, "s":False, "d":False, " ":False} 

class Thing: 
    def __init__(self, picture): 
     self.texture = pygame.image.load(picture).convert() 
     self.position = [360, 240] 

    def draw(self, screen): 
     screen.blit(self.texture, tuple([int(e) for e in self.position])) 

    def move(self, direction, distance): 
     if direction == "UP": 
      self.position[1] -= distance 
     elif direction == "DOWN": 
      self.position[1] += distance 
     elif direction == "RIGHT": 
      self.position[0] += distance 
     elif direction == "LEFT": 
      self.position[0] -= distance 

class Enemy: 
    def __init__(self, picture): 
     self.texture = pygame.image.load(picture).convert() 
     self.position = [15, 110] 

    def draw(self, screen): 
     screen.blit(self.texture, tuple([int(e) for e in self.position])) 

    def move(self, distance): 
     if player.direction == "UP": 
      self.position[1] -= distance 
     elif player.direction == "DOWN": 
      self.position[0] -= distance 
     elif player.direction == "RIGHT": 
      self.position[1] += distance 
     elif player.direction == "LEFT": 
      self.position[1] += distance 

done = False 
black = (0, 0, 0) 

player = Thing("2.png") 
enemy = Enemy("1.png") 

while not done: 
    clock.tick(60) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      done = True 
     if event.type == KEYDOWN: 
      if event.key == K_w: 
       keys["w"] = True 
      if event.key == K_a: 
       keys["a"] = True 
      if event.key == K_s: 
       keys["s"] = True 
      if event.key == K_d: 
       keys["d"] = True 
      if event.key == K_SPACE: 
       keys[" "] = True 

     if event.type == KEYUP: 
      if event.key == K_w: 
       keys["w"] = False 
      if event.key == K_a: 
       keys["a"] = False 
      if event.key == K_s: 
       keys["s"] = False 
      if event.key == K_d: 
       keys["d"] = False 
      if event.key == K_SPACE: 
       keys[" "] = False 

    #Consistent movement 
    if keys["w"]: 
     player.move("UP", 2) 
    if keys["a"]: 
     player.move("LEFT", 2) 
    if keys["s"]: 
     player.move("DOWN", 2) 
    if keys["d"]: 
     player.move("RIGHT", 2) 
    #if keys[" "]: 
     #Shoot.. 

    #Walls - Player 
    if player.position[1] <= -2: 
     player.position[1] += 2 
    if player.position[1] >= 433: 
     player.position[1] -= 2 
    if player.position[0] <= -2: 
     player.position[0] += 2 
    if player.position[0] >= 690: 
     player.position[0] -= 2 
    #Walls - Enemy 
    if enemy.position[1] <= -2: 
     enemy.position[1] += 2 
    if enemy.position[1] >= 433: 
     enemy.position[1] -= 2 
    if enemy.position[0] <= -2: 
     enemy.position[0] += 2 
    if enemy.position[0] >= 690: 
     enemy.position[0] -= 2 

    #Text 
    label = myfont.render("Health: " + str(health), 50, (255, 255, 255)) 
    screen.blit(label, (5, 5)) 

    player.draw(screen) 
    pygame.display.flip() 
pygame.quit() 
+1

哇。這是*方式*太多的代碼。 [mcve]的關鍵之一是* minimal *部分。我強烈懷疑,當你削減它時,你最終會自己回答這個問題。 –

回答

0

原來我的原始答案很接近 - 問題在於您只是簡單地繪製圖像 - 即使您聲明瞭black = (0, 0, 0),也不會填滿屏幕。在開始繪製其他所有內容之前,您需要輸入screen.fill(black)


爲了記錄在案,這裏是什麼最小,完整,可驗證的例子如下:

import pygame 
from pygame.locals import * 
import time 

pygame.font.init() 
myfont = pygame.font.SysFont("mirc", 25) 

screen = pygame.display.set_mode((720, 480)) 
clock = pygame.time.Clock() 


class Thing: 
    def __init__(self, picture): 
     self.texture = pygame.image.load(picture).convert() 
     self.position = [360, 240] 

    def draw(self, screen): 
     screen.blit(self.texture, self.position) 


done = False 
black = (0, 0, 0) 

player = Thing(os.path.expanduser("~/Downloads/disapproval.png")) 

x_direction = 1 
y_direction = 0 

while not done: 
    clock.tick(60) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      done = True 

    if player.position[0] < 400: 
     x_direction = 1 
     y_direction = 0 
    elif player.position[0] >= 400 and player.position[1] > 100: 
     x_direction = 0 
     y_direction = -1 
    else: 
     x_direction = 0 
     y_direction = 0 

    player.position[0] += x_direction 
    player.position[1] += y_direction 

    # Uncomment this line, and you'll fix your problem 
    #screen.fill(black) 
    player.draw(screen) 
    pygame.display.flip() 
pygame.quit() 

disapproval.png
disapproval

+0

謝謝,雖然我仍然希望它被繪製。在哪裏,你建議我把player.draw(screen)? – Rhys

+0

@Rhys證明我錯了。我已經更新了我的答案。 –