Python Pygame错误';TypeError:参数1必须是pygame.Surface,而不是list';
我正在使用pygame创建一个游戏,但遇到了一个错误,我是pygame的新手。我正在使用python 3.8和pycharm社区版2020.1 以下是我制作游戏的视频: 以下是错误:Python Pygame错误';TypeError:参数1必须是pygame.Surface,而不是list';,python,python-3.x,pygame,Python,Python 3.x,Pygame,我正在使用pygame创建一个游戏,但遇到了一个错误,我是pygame的新手。我正在使用python 3.8和pycharm社区版2020.1 以下是我制作游戏的视频: 以下是错误: Traceback (most recent call last): File "C:/Users/user/PycharmProjects/Agam/Python/Pygame.py", line 131, in <module> enemy(enemyX, enemy
Traceback (most recent call last):
File "C:/Users/user/PycharmProjects/Agam/Python/Pygame.py", line 131, in <module>
enemy(enemyX, enemyY)
File "C:/Users/user/PycharmProjects/Agam/Python/Pygame.py", line 28, in enemy
screen.blit(enemyImg, (x, y))
TypeError: argument 1 must be pygame.Surface, not list
回溯(最近一次呼叫最后一次):
文件“C:/Users/user/PycharmProjects/Agam/Python/Pygame.py”,第131行,在
敌人(灌肠,灌肠)
文件“C:/Users/user/PycharmProjects/Agam/Python/Pygame.py”,第28行
屏幕。blit(enemyImg,(x,y))
TypeError:参数1必须是pygame.Surface,而不是list
这是我的密码:
import math
import random
import pygame
pygame.init()
# Screen (Pixels by Pixels (X and Y (X = right and left Y = up and down)))
screen = pygame.display.set_mode((800, 600))
running = True
# Title and Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('Icon.png')
pygame.display.set_icon(icon)
# Player Icon/Image
playerimg = pygame.image.load('Player.png')
playerX = 370
playerY = 480
playerX_change = 0
def player(x, y):
# Blit means Draw
screen.blit(playerimg, (x, y))
def enemy(x, y):
# Blit means Draw
screen.blit(enemyImg, (x, y))
def fire_bullet(x, y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletimg, (x + 16, y + 10))
def isCollision(enemyX, enemyY, bulletX, bulletY):
distance = math.sqrt((math.pow(enemyX[i] - bulletX, 2) + (math.pow(enemyY[i] - bulletY, 2))))
if distance < 27:
return True
else:
return False
background = pygame.image.load('247.jpg')
# Enemy
num_of_enemy = 6
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
for i in range(num_of_enemy):
enemyImg.append(pygame.image.load('space-invaders.png'))
enemyX.append(random.randint(0, 735))
enemyY.append(random.randint(50, 150))
enemyX_change.append(4)
enemyY_change.append(40)
bulletimg = pygame.image.load('bullet.png')
bulletX = 0
bulletY = 450
bulletX_change = 480
bulletY_change = 10
bullet_state = "ready"
score = 0
# Game loop (Put most of code for game in this loop)
while running:
screen.fill((255, 0, 0))
# BAckground
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# if keystroke is pressed check whether is right or left
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -5
if event.key == pygame.K_RIGHT:
playerX_change = 5
if event.key == pygame.K_SPACE:
if bullet_state == "ready":
bulletX = playerX
fire_bullet(playerX, bulletY)
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0
# RGB (screen.fill) = red green blue
# 5 = 5 + - 0.1 -> 5 = 5 - 0.1
# making so nothing can go out of bounds
for i in range(num_of_enemy):
enemyX[i] += enemyX_change[i]
if enemyX[i] <= 0:
enemyX_change[i] = 4
enemyY[i] += enemyY_change[i]
elif enemyX[i] >= 736:
enemyX_change[i] = -4
enemyY[i] += enemyY_change[i]
playerX += playerX_change
if playerX <= 0:
playerX = 0
elif playerX >= 736:
playerX = 736
# Bullet movement
if bulletY <= 0:
bulletY = 480
bullet_state = "ready"
if bullet_state == "fire":
fire_bullet(bulletX, bulletY)
bulletY -= bulletY_change
# Collison
collision = isCollision(enemyX, enemyY, bulletX, bulletY)
if collision:
bulletY = 480
bullet_state = "ready"
score += 1
print(score)
enemyX = random.randint(0, 735)
enemyY = random.randint(50, 150)
player(playerX, playerY)
enemy(enemyX, enemyY)
pygame.display.update()
导入数学
随机输入
导入pygame
pygame.init()
#屏幕(像素乘以像素(X和Y(X=右和左Y=上下)))
screen=pygame.display.set_模式((800600))
运行=真
#标题和图标
pygame.display.set_标题(“太空入侵者”)
icon=pygame.image.load('icon.png'))
pygame.display.set_图标(图标)
#播放器图标/图像
playerimg=pygame.image.load('Player.png')
playerX=370
playerY=480
playerX_change=0
def播放器(x,y):
#Blit意味着抽签
屏幕光点(playerimg,(x,y))
def敌人(x,y):
#Blit意味着抽签
屏幕。blit(enemyImg,(x,y))
def火焰弹(x,y):
全球子弹头状态
bullet_state=“火灾”
屏幕光点(项目符号,(x+16,y+10))
def isCollision(灌肠剂、灌肠剂、子弹剂、子弹剂):
距离=math.sqrt((math.pow(enemyX[i]-bulletX,2)+(math.pow(enemyY[i]-bulletY,2)))
如果距离小于27:
返回真值
其他:
返回错误
background=pygame.image.load('247.jpg')
#敌人
敌人的数量=6
enemyImg=[]
灌肠剂=[]
Enemy=[]
enemyX_change=[]
Enemy_change=[]
对于范围内的i(敌人的数量):
enemyImg.append(pygame.image.load('space-invaders.png'))
enemyX.append(random.randint(0735))
Enemy.append(random.randint(50150))
enemyX_变更追加(4)
Enemy_变更追加(40)
bulletimg=pygame.image.load('bullet.png')
bulletX=0
bulletY=450
bulletX_变化=480
bulletY_变化=10
bullet_state=“就绪”
分数=0
#游戏循环(将游戏的大部分代码放在这个循环中)
运行时:
屏幕填充((255,0,0))
#背景
屏幕光点(背景,(0,0))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#如果按下击键,检查是右键还是左键
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
playerX_变化=-5
如果event.key==pygame.K_RIGHT:
playerX_change=5
如果event.key==pygame.K_空间:
如果bullet_state==“ready”:
bulletX=playerX
火光弹(playerX,bulletY)
elif event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
playerX_change=0
#RGB(屏幕填充)=红-绿-蓝
# 5 = 5 + - 0.1 -> 5 = 5 - 0.1
#使任何东西都不能越界
对于范围内的i(敌人的数量):
enemyX[i]+=enemyX_变化[i]
如果enemyX[i]=736:
enemyX_变化[i]=-4
Enemy[i]+=Enemy_变化[i]
playerX+=playerX\u更改
如果playerX=736:
playerX=736
#子弹运动
如果bulletYenemyImg
是图像列表:
enemyImg=[]
enemyImg.append(pygame.image.load('space-investors.png'))
因此,您必须按订阅从列表中选择图像
无论如何,你有一个敌人图像列表enemyImg
和一个x坐标列表(enemyX
,enemyY
)。
将敌方图像的参数添加到函数敌方
:
def敌方(img,x,y):
#Blit意味着抽签
屏幕光点(img,(x,y))
把敌人画成一个圈:
运行时:
# [...]
#平局球员
玩家(playerX,playerY)
#把敌人画成一个圈
对于范围内的i(len(enemyImg)):
敌人(enemyImg[i]、enemyX[i]、enemyY[i])
#更新dieplay
pygame.display.update()
enemyImg
是一个图像列表:
enemyImg=[]
enemyImg.append(pygame.image.load('space-investors.png'))
因此,您必须按订阅从列表中选择图像
无论如何,你有一个敌人图像列表enemyImg
和一个x坐标列表(enemyX
,enemyY
)。
将敌方图像的参数添加到函数敌方
:
def敌方(img,x,y):
#Blit意味着抽签
屏幕光点(img,(x,y))
把敌人画成一个圈:
运行时:
# [...]
#平局球员
玩家(playerX,playerY)
#把敌人画成一个圈
对于范围内的i(len(enemyImg)):
敌人(enemyImg[i]、enemyX[i]、enemyY[i])
#更新dieplay
pygame.display.update()
typeError:目标位置无效blit@piddi24我已扩展了答案。typeError:的目标位置无效blit@piddi24是的,很抱歉没有接受答案是的,很抱歉没有接受答案