![](/img/trans.png)
[英]Spyder (Python 3.7) starts with a black window. How can I fix it?
[英]Python & Pygame - I am trying to make window and player that can move (WASD), but it makes only black window.
我正在研究在pygame中制作精靈的更簡單方法(僅對我而言)。 我有這3個檔案
文件1:Tests.py:
import pygame
from pygame.locals import *
import MySprites
import SpecialFunctions
Sprites = []
NewScreen = SpecialFunctions.Level('NewProject', '2D-AboveView', (960, 540), Sprites)
Sprites = []
imgDolu = [pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-8.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-9.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-10.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-11.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-12.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-13.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-14.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-15.png')]
imgNahoru = [pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-0.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-1.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-2.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-3.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-4.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-5.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-6.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-1-7.png')]
imgDoleva = [pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-0.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-1.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-2.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-3.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-4.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-5.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-6.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-7.png')]
imgDoprava = [pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-8.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-9.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-10.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-11.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-12.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-13.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-14.png'), pygame.image.load('HeroSprites/HeroSpriteSheet2 [www.imagesplitter.net]-0-15.png')]
imgUtociNahoru = []; imgUtociDolu = []; imgUtociDoleva = []; imgUtociDoprava = []
Player1 = MySprites.Player_Type_AboveView(movingUp=imgNahoru, movingDown=imgDolu, movingLeft=imgDoleva, movingRight=imgDoprava, swingingUp=imgUtociNahoru, swingingDown=imgUtociDolu, swingingLeft=imgUtociDoleva, swingingRight=imgUtociDoprava, controlUp=pygame.K_w, controlDown=pygame.K_s, controlLeft=pygame.K_a, controlRight=pygame.K_d, controlSwing=pygame.K_k, speed=5, x=960/2, y=540/2)
Sprites.append(Player1)
NewScreen.mainloop()
多數民眾贊成在我的普通文件,這是我正在測試。
文件2:SpecialFunctions.py:
import pygame
import MySprites
from pygame.locals import *
class Level:
def __init__(self, Name, Type, screen_size, AllSprites):
"""Inicialization of Project"""
black = (0, 0, 0)
screen_size = screen_size
self.screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption(Name)
self.screen.fill(black)
pygame.display.update()
self.ProjectSprites = AllSprites
self.Running = True
self.type = Type
self.keys_pressed_list = []
def screen_Update(self):
if self.Running:
self.screen.fill((0, 0, 0))
for sprite in self.ProjectSprites:
sprite.update(sprite, self.screen)
sprite.draw(self.screen)
pygame.display.update()
def mainloop(self):
"""Running program"""
while self.Running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
self.Running = False
break
elif event.type == pygame.KEYDOWN:
self.keys_pressed_list.append(event.key)
elif event.type == pygame.KEYUP:
self.keys_pressed_list.remove(event.key)
if self.Running:
self.screen_Update()
pygame.time.delay(100)
該文件包含一些我可以在屏幕上使用的工具。
文件3:MySprites.py:
import pygame
class Player_Type_AboveView (pygame.sprite.Sprite):
def __init__(self,
movingUp, movingDown, movingLeft, movingRight,
swingingUp, swingingDown, swingingLeft, swingingRight,
controlUp, controlDown, controlLeft, controlRight, controlSwing,
speed, x, y):
pygame.sprite.Sprite.__init__(self)
#Player controls:
self.controls_Up = controlUp
self.controls_Down = controlDown
self.controls_Left = controlLeft
self.controls_Right = controlRight
self.controls_Swing = controlSwing
#Player textures:
self.imgUp = movingUp
self.imgDown = movingDown
self.imgLeft = movingLeft
self.imgRight = movingRight
self.swingingUp = swingingUp
self.swingingDown = swingingDown
self.swingingLeft = swingingLeft
self.swingingRight = swingingRight
self.phase = 0
self.imgGroup = self.imgDown
self.image = self.imgGroup[self.phase]
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.speed = speed
self.Swinging = False
def update(self, Scene):
moved = False
x = 0
y = 0
#Player controls
if self.controls_Up in Scene.keys_pressed_list:
self.imageGroup = self.imgUp
y = -self.speed
moved = True
elif self.controls_Down in Scene.keys_pressed_list:
self.imageGroup = self.imgDown
y = self.speed
moved = True
elif self.controls_Left in Scene.keys_pressed_list:
self.imageGroup = self.imgLeft
x = -self.speed
moved = True
elif self.controls_Right in Scene.keys_pressed_list:
self.imageGroup = self.imgRight
x = self.speed
moved = True
elif self.controls_Swing in Scene.keys_pressed_list:
Swinging = {
self.imgDown : self.swingingDown,
self.imgUp: self.swingingUp,
self.imgLeft: self.swingingLeft,
self.imgRight: self.swingingRight
}
self.imageGroup = Swinging[self.imageGroup]
self.Swinging = True
moved = True
if moved or self.phase != 0:
if moved:
self.phase = (self.phase + 1) % 4
else:
self.phase = 0
self.image = self.imageGroup[self.phase]
self.rect.x += x
self.rect.y += y
self.Swinging = False
這是播放器類-Btw的文件。 擺動是在制品。
我正在嘗試制作可移動的窗口和播放器(WASD),但它只能制作黑色窗口。 我需要知道的是為什么?!
我正在使用python 3.6
希望這個問題不是那么愚蠢
您添加播放器精靈的列表與您在Level
實例中使用的列表不同。 在這里看看:
...
import SpecialFunctions
Sprites = []
NewScreen = SpecialFunctions.Level('NewProject', '2D-AboveView', (960, 540), Sprites)
Sprites = []
...
因此,當您將Player_Type_AboveView
實例添加到另一個未在任何地方使用的列表時, NewScreen
只會看到第一個列表,該列表始終為空。
只需刪除第二個Sprites = []
行。
而且,(大多數時候)最好使用一個Group
而不是一個列表來管理您的精靈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.