Python 从列表中提取的对象不在屏幕上(pygame)
我开始更多地使用类,并尝试将我的旧的无类代码转换为这种新格式。以前,我将列表定义为全局变量,可以毫无问题地将多个敌人吸引到屏幕上。然而,这一次,与职业有关的东西会导致敌人被吸引,并立即从他们的位置消失 非常感谢您的帮助或解决方法。代码如下:Python 从列表中提取的对象不在屏幕上(pygame),python,pygame,Python,Pygame,我开始更多地使用类,并尝试将我的旧的无类代码转换为这种新格式。以前,我将列表定义为全局变量,可以毫无问题地将多个敌人吸引到屏幕上。然而,这一次,与职业有关的东西会导致敌人被吸引,并立即从他们的位置消失 非常感谢您的帮助或解决方法。代码如下: import pygame import sys import random import math pygame.init() class enemies(object): enemies = [] def __init__(self,
import pygame
import sys
import random
import math
pygame.init()
class enemies(object):
enemies = []
def __init__(self, enemy_num, diff, enemy_size):
self.enemy_num = enemy_num
self.diff = diff
self.enemy_s = enemy_size
def add_enemies(self):
counter = 0
if len(self.enemies) < self.enemy_num:
for enemy in range(0, self.enemy_num):
if len(self.enemies) < 5:
self.enemies.append([counter * (self.enemy_s * 0.5), 200, (50, 168, 82)])
elif len(self.enemies) > 5 and len(self.enemies) <= 9:
self.enemies.append([counter * (self.enemy_s * 0.5), 250, (168, 160, 50)])
else:
self.enemies.append([counter * (self.enemy_s * 0.5), 300, (50, 52, 168)])
counter += 1
def move(self, surface):
for enemy in self.enemies:
surface.fill((0, 0, 0))
pygame.draw.rect(surface, enemy[2], (enemy[0], enemy[1], self.enemy_s, self.enemy_s))
pygame.display.update()
class ship(object):
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
def draw_all(self, surface, ship_size):
surface.fill((0, 0, 0))
pygame.draw.rect(surface, self.color, (self.x, self.y, ship_size, ship_size))
pygame.display.update()
def move(self):
keys = pygame.key.get_pressed()
for key in keys:
if keys[pygame.K_LEFT]:
self.x -= 0.2
if keys[pygame.K_RIGHT]:
self.x += 0.2
if keys[pygame.K_UP]:
self.y -= 0.2
if keys[pygame.K_DOWN]:
self.y += 0.2
def main():
width = 800
height = 1000
ship_size = 35
difficulty = 0
enemy_number = 12
enemy_size = 35
player = ship(width / 2, height - 100, (255, 0, 0))
aliens = enemies(enemy_number, difficulty, enemy_size)
screen = pygame.display.set_mode((width, height))
enemy_list = 12
run = True
clock = pygame.time.Clock()
aliens.add_enemies()
while run:
player.draw_all(screen, ship_size)
player.move()
aliens.move(screen)
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.display.quit()
main()
导入pygame
导入系统
随机输入
输入数学
pygame.init()
类(对象):
敌人=[]
定义初始(自身、敌人数量、差异、敌人大小):
self.敌军人数=敌军人数
self.diff=diff
self.敌军大小=敌军大小
def添加敌人(自身):
计数器=0
如果len(self.敌军) elif len(self.friends)>5和len(self.friends)您必须在应用程序的主循环中执行1次清除显示和1次显示更新。
分别从.move()
和方法中删除.fill()
。清除显示一次,绘制所有对象,然后更新显示:
运行时:
时钟滴答(30)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
pygame.display.quit()
屏幕填充((0,0,0))
玩家。全部抽签(屏幕、发货尺寸)
player.move()
外星人。移动(屏幕)
pygame.display.update()
注意,您没有看到敌人,因为在敌人.move()
中绘制单个敌人之前,显示是清晰的,而在船舶.draw_all()中绘制船舶时,显示也是清晰的