简体   繁体   English

Python和Pygame-我正在尝试制作可移动的窗口和播放器(WASD),但它仅制作黑色窗口。

[英]Python & Pygame - I am trying to make window and player that can move (WASD), but it makes only black window.

I am working on easier way to make sprites in pygame (It's only for me). 我正在研究在pygame中制作精灵的更简单方法(仅对我而言)。 I have this 3 files 我有这3个档案

file 1: Tests.py: 文件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()

Thats my general file, this is where I am testing. 多数民众赞成在我的普通文件,这是我正在测试。

file 2: SpecialFunctions.py: 文件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)

This is file with some tools that I can use for my screen. 该文件包含一些我可以在屏幕上使用的工具。

file 3: MySprites.py: 文件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

This is file with player class - Btw. 这是播放器类-Btw的文件。 swinging is WIP. 摆动是在制品。

I am trying to make window and player that can move (WASD), but it makes only black window. 我正在尝试制作可移动的窗口和播放器(WASD),但它只能制作黑色窗口。 What I need to know is WHY?! 我需要知道的是为什么?!

  • I am using python 3.6 我正在使用python 3.6

  • Hope this question isn't so stupid 希望这个问题不是那么愚蠢

The list you add your player sprite to is not the same list you use in your Level instance. 您添加播放器精灵的列表与您在Level实例中使用的列表不同。 Take a look here: 在这里看看:

...
import SpecialFunctions

Sprites = []

NewScreen = SpecialFunctions.Level('NewProject', '2D-AboveView', (960, 540), Sprites)

Sprites = []

...

So NewScreen will only ever see the first list, which is always empty, while you add your Player_Type_AboveView instance to another list that isn't used anywhere. 因此,当您将Player_Type_AboveView实例添加到另一个未在任何地方使用的列表时, NewScreen只会看到第一个列表,该列表始终为空。

Just remove the second Sprites = [] line. 只需删除第二个Sprites = []行。

Also, it's (most of the time) better to use a Group instead of a list for managing your sprites. 而且,(大多数时候)最好使用一个Group而不是一个列表来管理您的精灵。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spyder (Python 3.7) 以黑色窗口开始。 我该如何解决? - Spyder (Python 3.7) starts with a black window. How can I fix it? 当我尝试在 PyGame 中制作游戏时,不会出现 window - When I am trying to make a game in PyGame the window will not come up 在Python Tkinter中,我已经成功创建了一个绑定,但是只有当我单击tkinter窗口时,它才能起作用。 - In Python Tkinter, I have successfully made a keybind but it only works when I am clicked into the tkinter window. 我试图让我的蛇在不使用 wasd 或箭头键的情况下自动移动 - I am trying to make my snake move automatically without using wasd or the arrow keys 我正在使用 pygame 制作 mp3 播放器,但是当 pygame.music,load() window 不允许我退出时 - I am using pygame to make an mp3 player, but when the pygame.music,load() the window will not allow me to quit pygame - while 循环使 pygame 窗口冻结/如何将子弹射出玩家? - pygame - while loop makes pygame window freeze / how do I shoot the bullets out of the player? 我可以在屏幕上移动pygame游戏窗口(pygame) - Can I move the pygame game window around the screen (pygame) pygame屏幕仅在我将窗口移离屏幕时有效 - pygame screen only works when i move the window off the screen Python:如何使gtk窗口缓慢移动 - Python: How can I make my gtk window move slowly Pygame Window为黑色 - Pygame Window is black
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM