Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:参数1必须是pygame.Surface,而不是None_Python_Python 2.7 - Fatal编程技术网

Python TypeError:参数1必须是pygame.Surface,而不是None

Python TypeError:参数1必须是pygame.Surface,而不是None,python,python-2.7,Python,Python 2.7,我正在制作一个类似于Galaga的电脑游戏。我在碰撞中遇到了麻烦,无法让物体在没有错误的情况下消失。我想让激光在与敌人碰撞时消失,敌人在10次左右的命中后消失。我不理解出现的错误,也不理解如何解决问题 谢谢 代码: 导入pygame、sys、pygame.mixer 从系统导入退出 随机输入 从pygame导入* 导入时间 h=700 w=700 m=0 h=0 分数=0 screen=pygame.display.set_模式((w,h)) clock=pygame.time.clock()

我正在制作一个类似于Galaga的电脑游戏。我在碰撞中遇到了麻烦,无法让物体在没有错误的情况下消失。我想让激光在与敌人碰撞时消失,敌人在10次左右的命中后消失。我不理解出现的错误,也不理解如何解决问题

谢谢

代码:

导入pygame、sys、pygame.mixer
从系统导入退出
随机输入
从pygame导入*
导入时间
h=700
w=700
m=0
h=0
分数=0
screen=pygame.display.set_模式((w,h))
clock=pygame.time.clock()
完成=错误
x=400
y=400
白色=(255,255,255)
background=pygame.image.load('water.png')
pygame.init()
职业球员:
定义初始化(self,x,y):
self.x=x
self.y=y
自宽=100
自身高度=100
自速度=0
self.images=pygame.image.load('speeder.png')
self.numImages=6
self.cImage=0
def更新(自我):
self.speedx=0
self.speeded=0
pressed=pygame.key.get_pressed()
如果按下[pygame.K_LEFT]:
self.speedx-=8
如果按下[pygame.K_RIGHT]:
self.speedx+=8
self.x+=self.speedx
如果按下[pygame.K_DOWN]:
self.cImage=0
self.y+=4
如果按下[pygame.K_UP]和(self.cImage=5:
self.cImage=5
def渲染(自身,屏幕):
blit(self.images,(self.x,self.y),(self.cImage*self.width,0,self.width,self.height))
第1类:
定义初始化(self,x,y):
self.x=x
self.y=y
self.width=128
self.height=128
自速度=0
self.images=pygame.image.load('enemy1.png')
self.numImages=7
self.cImage=0
self.z=0
self.j=0
self.rect=self.images.get_rect()
def更新(自我):
self.j+=1
self.speedx=0
self.speeded=0
self.y+=1
如果self.z 100和self.z<200:
self.x+=random.randint(-2,-1)
#self.cImage+=1
如果self.z>=200:
self.z=0
如果self.j%10==0:
self.cImage+=1
如果self.cImage==7:
self.cImage=0
self.z+=random.randint(0,5)
def渲染(自身,屏幕):
blit(self.images,(self.x,self.y),(self.cImage*self.width,0,self.width,self.height))
激光类(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load('lazer.png')
self.rect=self.image.get_rect()
self.m=0
def更新(自我):
self.m+=1
如果(self.m%5)!=0或self.m%4!=1:
自校正y-=13
def杀死(自我):
self.image=None
类RLaser(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load('lazer.png')
self.rect=self.image.get_rect()
self.m=0
def更新(自我):
self.m+=1
如果(self.m%5)!=0或self.m%4!=1:
自校正y+=13
班长(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.x=x
self.y=y
自宽=50
自身高度=100
自速度=0
self.images=pygame.image.load('boss.png')
self.numImages=5
self.cImage=0
self.z=0
self.rect=self.images.get_rect()
def更新(自我):
self.speedx=0
self.speeded=0
self.y+=1
如果self.z 100和self.z<200:
self.x+=random.randint(-2,-1)
self.cImage+=1
如果self.z>=200:
self.z=0
如果self.cImage==5:
self.cImage=4
self.z+=random.randint(0,5)
def渲染(自身,屏幕):
blit(self.images,(self.x,self.y),(self.cImage*self.width,0,self.width,self.height))
pygame.init()
所有精灵列表=pygame.sprite.Group()
laser_list=pygame.sprite.Group()
#enemy1blast_list=pygame.sprite.Group()
玩家=玩家(400590)
凸台=凸台(300100)
敌人=敌人1(100,50)
j=0
虽然没有这样做:
j+=1
屏幕光点(背景,(0,(-690*2)+j))
屏幕光点(背景,(0,-690+j))
屏幕光点(背景,(0,j))
屏幕光点(背景,(0690+j))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
完成=正确
pressed=pygame.key.get_pressed()
#j+=1
#如果j%10==0:
#enemy1blaster=Enemy1Blast()
#enemy1blaster.rect.x=敌人.x
#enemy1blaster.rect.y=敌人.y
#所有精灵列表。添加(enemy1blaster)
#enemy1blast_列表。添加(enemy1blaster)
如果按下[pygame.K_SPACE]:
m+=2
如果(m%4)!=0:
激光=激光()
laser.rect.x=(player.x+14)
laser.rect.y=(player.y-6)
所有精灵列表。添加(激光)
激光列表。添加(激光)
对于激光器列表中的激光器:

如果laser.rect.x>=敌方.rect.x或laser.rect.x=敌方.rect.y或laser.rect.y,代码中的哪一行出现错误?在绘制它们时,第252行有问题。回溯(最后一次调用):文件“/Users/mktalaga/Desktop/Canterbury 2016/Computer Tech 2/Final.py”,第252行,在所有精灵列表中绘制(屏幕)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/pygame/sprite.py”,第409行,在draw self.spritedict[spr]=surface_blit(spr.image,spr.rect)TypeError:参数1必须是pygame.Surface,而不是None我还没有使用pygame,但第252行显示的是
screen
None
。我看不出它将被设置为
import pygame, sys, pygame.mixer
from sys import exit
import random
from pygame import *
import time
h = 700
w = 700
m = 0
h = 0
score = 0
screen = pygame.display.set_mode((w, h))
clock = pygame.time.Clock()
done = False
x = 400
y = 400
white = (255, 255, 255)
background = pygame.image.load('water.png')
pygame.init()

class Player:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.width = 100
        self.height = 100
        self.velocity = 0
        self.images = pygame.image.load('speeder.png')
        self.numImages = 6
        self.cImage = 0
    def update(self):
        self.speedx = 0
        self.speedy = 0
        pressed = pygame.key.get_pressed()
        if pressed[pygame.K_LEFT]:
            self.speedx -= 8
        if pressed[pygame.K_RIGHT]:
            self.speedx += 8  
        self.x += self.speedx
        if pressed[pygame.K_DOWN]:
            self.cImage = 0
            self.y += 4
        if pressed[pygame.K_UP] and (self.cImage <= self.numImages - 1):
            self.cImage += 1
            self.y -= 10  
        if self.cImage >= 5:
            self.cImage = 5 
    def render(self, screen):
        screen.blit(self.images, (self.x, self.y), (self.cImage * self.width, 0, self.width, self.height)) 
class Enemy1:
def __init__(self, x, y):
    self.x = x
    self.y = y
    self.width = 128
    self.height = 128
    self.velocity = 0
    self.images = pygame.image.load('enemy1.png')
    self.numImages = 7
    self.cImage = 0
    self.z = 0
    self.j = 0
    self.rect = self.images.get_rect()
def update(self):
    self.j += 1
    self.speedx = 0
    self.speedy = 0
    self.y += 1
    if self.z <= 100:
        self.x += random.randint(1, 2)
    elif self.z > 100 and self.z < 200:
        self.x += random.randint(-2, -1)  
    #self.cImage += 1
    if self.z >= 200:
        self.z = 0    
    if self.j % 10 == 0:
        self.cImage += 1 
    if self.cImage == 7:
        self.cImage = 0
    self.z += random.randint(0, 5)
def render(self, screen):
    screen.blit(self.images, (self.x, self.y), (self.cImage * self.width, 0, self.width, self.height))                    
class Laser(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('lazer.png')
        self.rect = self.image.get_rect() 
        self.m = 0  
    def update(self):
        self.m += 1
        if (self.m % 5) != 0 or self.m % 4 != 1:
            self.rect.y -= 13
    def kill(self):
        self.image = None
class RLaser(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('lazer.png')
        self.rect = self.image.get_rect() 
        self.m = 0  
    def update(self):
        self.m += 1
        if (self.m % 5) != 0 or self.m % 4 != 1:
            self.rect.y += 13
   class Boss(pygame.sprite.Sprite):
        def __init__(self, x, y):
            pygame.sprite.Sprite.__init__(self)
            self.x = x
            self.y = y
            self.width = 50
            self.height = 100
            self.velocity = 0
            self.images = pygame.image.load('boss.png')
            self.numImages = 5
            self.cImage = 0
            self.z = 0
            self.rect = self.images.get_rect()
        def update(self):
            self.speedx = 0
            self.speedy = 0
            self.y += 1
            if self.z <= 100:
                self.x += random.randint(1, 2)
            elif self.z > 100 and self.z < 200:
                self.x += random.randint(-2, -1)  
            self.cImage += 1
            if self.z >= 200:
                self.z = 0 
            if self.cImage == 5:
                self.cImage = 4
            self.z += random.randint(0, 5) 
        def render(self, screen):
            screen.blit(self.images, (self.x, self.y), (self.cImage * self.width, 0, self.width, self.height))               

pygame.init()                          
all_sprites_list = pygame.sprite.Group()
laser_list = pygame.sprite.Group()
#enemy1blast_list = pygame.sprite.Group()
player = Player(400, 590)
boss = Boss(300, 100) 
enemy = Enemy1(100, 50)  
j = 0                 
while not done:
    j += 1
    screen.blit(background, (0, (-690 * 2) + j))
    screen.blit(background, (0, -690 + j))
    screen.blit(background, (0, j))
    screen.blit(background, (0, 690 + j))
    for event in pygame.event.get():
            if event.type == pygame.QUIT:
                    done = True
    pressed = pygame.key.get_pressed()
    #j += 1
    #if j % 10 == 0:
     #   enemy1blaster = Enemy1Blast()
      #  enemy1blaster.rect.x = enemy.x
       # enemy1blaster.rect.y = enemy.y
        #all_sprites_list.add(enemy1blaster)
        #enemy1blast_list.add(enemy1blaster)
    if pressed[pygame.K_SPACE]:
        m += 2
        if (m % 4) != 0:
            laser = Laser()
            laser.rect.x = (player.x + 14)
            laser.rect.y = (player.y - 6)
            all_sprites_list.add(laser)
            laser_list.add(laser)
            for laser in laser_list:
                if laser.rect.x >= enemy.rect.x or laser.rect.x <= enemy.rect.x and laser.rect.y >= enemy.rect.y or laser.rect.y <= enemy.rect.y:
                    laser.kill() 
    if pressed[pygame.K_SPACE]:
        h += 2  
        if (h % 4) != 0:
            l = Laser()
            l.rect.x = (player.x + 61)
            l.rect.y = (player.y - 6)
            all_sprites_list.add(l)
            laser_list.add(l)
            lsound = pygame.mixer.Sound("Laser.wav")
            lsound.play()
    if j % 20 == 0 and boss.y <= 700:
        bl = RLaser()
        bl2 = RLaser()
        bl.rect.x = (boss.x + 1)
        bl.rect.y = (boss.y + 50)
        bl2.rect.x = (boss.x + 19)
        bl2.rect.y = (boss.y + 50)
        all_sprites_list.add(bl)
        all_sprites_list.add(bl2)
        laser_list.add(bl)
        laser_list.add(bl2)
        blsound = pygame.mixer.Sound("Laser.wav")
        blsound.play()
        #if bool(bl) == True:
        #bl.rect.y += 26            
    all_sprites_list.update()
    #if bool(bl) == True:
        #bl.rect.y += 26
    #for laser in laser_list:
     #   if pygame.sprite.collide_rect(boss, laser):
      #      laser.kill()
       #     print "asdfasdf"

if player.y <= 200:
    player.y = 202
if player.y >= 633:
    player.y = 631
if player.x >= 623:
    player.x = 621
if player.x <= -30:
    player.x = -28   


#Collision_Detector(laser, l, boss)        
boss.render(screen)
boss.update()  
enemy.render(screen)
enemy.update()          
player.render(screen)
player.update()
boss_laser_hlist = pygame.sprite.spritecollide(boss, laser_list, False)
enemy_laser_hlist = pygame.sprite.spritecollide(enemy, laser_list, False)
for laser in enemy_laser_hlist:
    score += 1
for laser in boss_laser_hlist:
    score += 1
    print score
all_sprites_list.draw(screen)
pygame.display.update()
clock.tick(30)