Python 射弹不会变成图像错误如何修复?
所以我制作了一个投射类,并试图将其更改为图像,但我得到了这个错误Python 射弹不会变成图像错误如何修复?,python,css,python-3.x,pygame,Python,Css,Python 3.x,Pygame,所以我制作了一个投射类,并试图将其更改为图像,但我得到了这个错误 File "C:\Users\Habib\Desktop\PYTHONGGAME\py.py", line 320, in <module> bullet.draw(window) File "C:\Users\Habib\Desktop\PYTHONGGAME\py.py", line 20, in draw window.blit(win, self.color, (self.x,self.
File "C:\Users\Habib\Desktop\PYTHONGGAME\py.py", line 320, in <module>
bullet.draw(window)
File "C:\Users\Habib\Desktop\PYTHONGGAME\py.py", line 20, in draw
window.blit(win, self.color, (self.x,self.y), self.radius)
TypeError: invalid destination position for blit
第五部分使用按键显示投射物并移动它
if keys[pygame.K_a]:
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.speed
else:
bullets.pop(bullets.index(bullet))
if len(bullets) < 2:
bullets.append(projectile(round(playerman.x+playerman.width//2), round(playerman.y + playerman.height//2), 6, (0,0,0)))
if keys[pygame.K_d]:
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x -= bullet.speed
else:
bullets.pop(bullets.index(bullet))
if len(bullets) < 2:
bullets.append(projectile(round(playerman.x+playerman.width//2), round(playerman.y + playerman.height//2), 6, (0,0,0)))
if键[pygame.K_a]:
对于子弹中的子弹:
如果bullet.x<500且bullet.x>0:
bullet.x+=bullet.speed
其他:
子弹.弹孔(子弹.索引(子弹))
如果透镜(子弹)<2:
子弹。附加(投射物(圆形(playerman.x+playerman.width//2),圆形(playerman.y+playerman.height//2),6,(0,0,0)))
如果键[pygame.K_d]:
对于子弹中的子弹:
如果bullet.x<500且bullet.x>0:
bullet.x-=bullet.speed
其他:
子弹.弹孔(子弹.索引(子弹))
如果透镜(子弹)<2:
子弹。附加(投射物(圆形(playerman.x+playerman.width//2),圆形(playerman.y+playerman.height//2),6,(0,0,0)))
我的完整代码
import pygame
pygame.init()
window = pygame.display.set_mode((500,500))
pygame.display.set_caption("Game")
plat = pygame.image.load("gt.png")
coinss = pygame.image.load("coin_gold.png")
slash = pygame.image.load("slash_03.png")
class projectile(object):
def __init__(self,x,y,radius,color):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.speed = 8
self.slash = pygame.image.load("slash_03.png")
def draw(self,win):
window.blit(win, self.color, (self.x,self.y), self.radius)
pygame.draw.circle(win, self.color, (self.x,self.y), self.radius)
# the enemy
class enes:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# color for enems
green = (63, 190, 22)
enems1 = enes(350,259,50,50, green)
florida = [enems1]
# player class
class player:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.d_indesx = 0
self.s_index = 0
self.isJump = False
self.JumpCount = 10
self.speed = 5
self.fall = 0
self.rect = pygame.Rect(x,y,height,width)
self.direction = "right"
self.direction = "left"
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# platforms
class platform:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.plat = pygame.image.load("gt.png")
self.rect = pygame.Rect(x,y,plat.get_width(), plat.get_height())
self.plat = pygame.transform.scale(self.plat,(self.plat.get_width()//2,self.plat.get_height()//2))
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
window.blit(self.plat,self.rect)
# Coins
class coin:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.coinss = pygame.image.load("coin_gold.png")
self.rect = pygame.Rect(x,y,coinss.get_width(), coinss.get_height())
self.plat = pygame.transform.scale(self.coinss,(self.coinss.get_width()//2,self.coinss.get_height()//2))
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
window.blit(self.coinss,self.rect)
# Floor
class floor:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
font = pygame.font.Font('freesansbold.ttf', 30)
score = 0
text = font.render('Gold = ' + str(score), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (100, 40)
# enemy
Sfont = pygame.font.Font('freesansbold.ttf', 30)
Kills = 0
Stext = Sfont.render('Kills = ' + str(score), True, (255,255,255))
textRectS = Stext.get_rect()
textRectS.center = (400, 100)
# fps
FPS = 60
clock = pygame.time.Clock()
# colors
Green = (63, 190, 22)
Blue = (22, 190, 175)
white = (240, 240, 240)
# define the enemy player coin classes
playerman = player(40,390,30,30, Blue)
enemy1 = platform(150,390,190,10, Green)
enemy2 = platform(300,310,190,10, Green)
enemy3 = platform(80,260,190,10, Green)
enemy4 = platform(250,180,190,10, Green)
enemy5 = platform(490,120,190,10, Green)
enemy6 = platform(-50,100,190,10, Green)
enemy7 = platform(180,50,190,10, Green)
platforms = [enemy1,enemy2,enemy3,enemy4,enemy5,enemy6,enemy7]
# coin class
coin1 = coin(180,320,50,50, Green)
coin2 = coin(350,250,50,50, Green)
coin3 = coin(150,200,50,50, Green)
Coins_list = [coin1,coin2,coin3]
# floor class
floor1 = floor(-1000,490,9999,50, white)
flories = [floor1]
#main loop
bullets = []
runninggame = True
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runninggame = False
if playerman.y < 250:
playerman.y += 1
for platform in platforms:
platform.y += playerman.speed
for coin in Coins_list:
coin.y += playerman.speed
for floor in flories:
floor.y += playerman.speed
for enes in florida:
enes.y += playerman.speed
if playerman.y > 450:
playerman.y -= playerman.fall
for platform in platforms:
platform.y -= playerman.fall
for coin in Coins_list:
coin.y -= playerman.fall
for floor in flories:
floor.y -= playerman.fall
for enes in florida:
enes.y -= playerman.fall
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.speed
else:
bullets.pop(bullets.index(bullet))
if len(bullets) < 2:
bullets.append(projectile(round(playerman.x+playerman.width//2), round(playerman.y + playerman.height//2), 6, (0,0,0)))
if keys[pygame.K_d]:
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x -= bullet.speed
else:
bullets.pop(bullets.index(bullet))
if len(bullets) < 2:
bullets.append(projectile(round(playerman.x+playerman.width//2), round(playerman.y + playerman.height//2), 6, (0,0,0)))
if keys[pygame.K_LEFT]:
playerman.direction = "left"
playerman.x -= playerman.speed
if playerman.x < 100:
playerman.x += playerman.speed
for platform in platforms:
platform.x += playerman.speed
for coin in Coins_list:
coin.x += playerman.speed
for enes in florida:
enes.x += playerman.speed
if keys[pygame.K_RIGHT]:
playerman.direction = "right"
playerman.x += playerman.speed
if playerman.x > 400:
playerman.x -= playerman.speed
for platform in platforms:
platform.x -= playerman.speed
for coin in Coins_list:
coin.x -= playerman.speed
for enes in florida:
enes.x -= playerman.speed
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
playerman.isJump = False
collide = False
for platform in platforms:
if playerman.rect.colliderect(platform.rect):
collide = True
playerman.isJump = False
playerman.y = platform.rect.top - playerman.height + 1
if playerman.rect.right > platform.rect.left and playerman.rect.left < platform.rect.left - playerman.width:
playerman.x = platform.rect.left - playerman.width
if playerman.rect.left < platform.rect.right and playerman.rect.right > platform.rect.right + playerman.width:
playerman.x = platform.rect.right
for i in range(len(Coins_list)-1,-1,-1):
if playerman.rect.colliderect(Coins_list[i].rect):
del Coins_list[i]
score += 1
text = font.render('Score = ' + str(score), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (100, 40)
for floor in flories:
if playerman.rect.colliderect(floor.rect):
collide = True
playerman.isJump = False
playerman.y = floor.rect.top - playerman.height + 1
if playerman.rect.right > floor.rect.left and playerman.rect.left < floor.rect.left - playerman.width:
playerman.x = floor.rect.left - playerman.width
if playerman.rect.left < floor.rect.right and playerman.rect.right > floor.rect.right + playerman.width:
playerman.x = floor.rect.right
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 500 - playerman.height
if collide:
if keys[pygame.K_UP]:
playerman.isJump = True
playerman.fall = 0
else:
if playerman.JumpCount > 0:
playerman.y -= (playerman.JumpCount*abs(playerman.JumpCount))*0.3
playerman.JumpCount -= 1
else:
playerman.JumpCount = 10
playerman.isJump = False
window.fill((74, 107, 104))
enems1.draw()
window.blit(Stext,textRectS)
for bullet in bullets:
bullet.draw(window)
window.blit(text,textRect)
for platform in platforms:
platform.draw()
for coin in Coins_list:
coin.draw()
playerman.draw()
for floor in flories:
floor.draw()
pygame.display.update()
pygame.quit()
导入pygame
pygame.init()
window=pygame.display.set_模式((500500))
pygame.display.set_标题(“游戏”)
plat=pygame.image.load(“gt.png”)
coins=pygame.image.load(“coin\u gold.png”)
slash=pygame.image.load(“slash_03.png”)
类(对象):
定义初始值(自、x、y、半径、颜色):
self.x=x
self.y=y
自半径=半径
self.color=颜色
自身速度=8
self.slash=pygame.image.load(“slash\u 03.png”)
def抽签(自我,赢):
blit(win,self.color,(self.x,self.y),self.radius)
pygame.draw.circle(赢,self.color,(self.x,self.y),self.radius)
#敌人
enes类:
定义初始值(自、x、y、高度、宽度、颜色):
self.x=x
self.y=y
自我高度=高度
self.width=宽度
self.color=颜色
self.rect=pygame.rect(x,y,高度,宽度)
def牵引(自):
self.rect.topleft=(self.x,self.y)
pygame.draw.rect(窗口,self.color,self.rect)
#灌肠剂的颜色
绿色=(6319022)
enems1=enes(350259,50,50,绿色)
佛罗里达州=[enems1]
#球员级别
职业球员:
定义初始值(自、x、y、高度、宽度、颜色):
self.x=x
self.y=y
自我高度=高度
self.width=宽度
self.color=颜色
self.d_indexx=0
self.s_指数=0
self.isJump=False
self.JumpCount=10
自身速度=5
self.fall=0
self.rect=pygame.rect(x,y,高度,宽度)
self.direction=“right”
self.direction=“左”
def牵引(自):
self.rect.topleft=(self.x,self.y)
pygame.draw.rect(窗口,self.color,self.rect)
#平台
课程平台:
定义初始值(自、x、y、高度、宽度、颜色):
self.x=x
self.y=y
自我高度=高度
self.width=宽度
self.color=颜色
self.plat=pygame.image.load(“gt.png”)
self.rect=pygame.rect(x,y,plat.get_width(),plat.get_height())
self.plat=pygame.transform.scale(self.plat,(self.plat.get_width()//2,self.plat.get_height()//2))
self.rect=pygame.rect(x,y,高度,宽度)
def牵引(自):
self.rect.topleft=(self.x,self.y)
blit(self.plat、self.rect)
#硬币
等级硬币:
定义初始值(自、x、y、高度、宽度、颜色):
self.x=x
self.y=y
自我高度=高度
self.width=宽度
self.coinss=pygame.image.load(“coin\u gold.png”)
self.rect=pygame.rect(x,y,coinss.get_width(),coinss.get_height())
self.plat=pygame.transform.scale(self.coinss,(self.coinss.get_width()//2,self.coinss.get_height()//2))
self.color=颜色
self.rect=pygame.rect(x,y,高度,宽度)
def牵引(自):
self.rect.topleft=(self.x,self.y)
blit(self.coins,self.rect)
#地板
班级楼层:
定义初始值(自、x、y、高度、宽度、颜色):
self.x=x
self.y=y
自我高度=高度
self.width=宽度
self.color=颜色
self.rect=pygame.rect(x,y,高度,宽度)
def牵引(自):
self.rect.topleft=(self.x,self.y)
pygame.draw.rect(窗口,self.color,self.rect)
font=pygame.font.font('freesansbold.ttf',30)
分数=0
text=font.render('Gold='+str(score),True,(255255))
textRect=text.get_rect()
textRect.center=(100,40)
#敌人
Sfont=pygame.font.font('freesansbold.ttf',30)
Kills=0
Stext=Sfont.render('Kills='+str(score),True,(255255))
textRectS=Stext.get_rect()
textRectS.center=(400100)
#fps
FPS=60
clock=pygame.time.clock()
#颜色
绿色=(6319022)
蓝色=(22190175)
白色=(240240240)
#定义敌人玩家的硬币等级
玩家=玩家(40390,30,30,蓝色)
enemy1=平台(150390190,10,绿色)
enemy2=平台(300310190,10,绿色)
enemy3=平台(80260190,10,绿色)
enemy4=平台(250180190,10,绿色)
enemy5=平台(490120190,10,绿色)
enemy6=平台(-50100190,10,绿色)
enemy7=平台(180,50190,10,绿色)
平台=[灌肠1、灌肠2、灌肠3、灌肠4、灌肠5、灌肠6、灌肠7]
#硬币等级
硬币1=硬币(180320,50,50,绿色)
硬币2=硬币(350250,50,50,绿色)
硬币3=硬币(150200,50,50,绿色)
硬币列表=[coin1,coin2,coin3]
#地板类
地板1=地板(-100049099999,50,白色)
flories=[楼层1]
#主回路
项目符号=[]
runninggame=True
运行游戏时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
runninggame=错误
如果玩家y<250:
playerman.y+=1
对于平台中的平台:
platform.y+=playerman.speed
对于硬币列表中的硬币:
coin.y+=玩家速度
对于花卉地板:
地板y+=运动员速度
对于佛罗里达州的enes:
enes.y+=玩家速度
如果玩家y>450:
playerman.y-=playerman.fall
平台中的平台
import pygame
pygame.init()
window = pygame.display.set_mode((500,500))
pygame.display.set_caption("Game")
plat = pygame.image.load("gt.png")
coinss = pygame.image.load("coin_gold.png")
slash = pygame.image.load("slash_03.png")
class projectile(object):
def __init__(self,x,y,radius,color):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.speed = 8
self.slash = pygame.image.load("slash_03.png")
def draw(self,win):
window.blit(win, self.color, (self.x,self.y), self.radius)
pygame.draw.circle(win, self.color, (self.x,self.y), self.radius)
# the enemy
class enes:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# color for enems
green = (63, 190, 22)
enems1 = enes(350,259,50,50, green)
florida = [enems1]
# player class
class player:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.d_indesx = 0
self.s_index = 0
self.isJump = False
self.JumpCount = 10
self.speed = 5
self.fall = 0
self.rect = pygame.Rect(x,y,height,width)
self.direction = "right"
self.direction = "left"
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# platforms
class platform:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.plat = pygame.image.load("gt.png")
self.rect = pygame.Rect(x,y,plat.get_width(), plat.get_height())
self.plat = pygame.transform.scale(self.plat,(self.plat.get_width()//2,self.plat.get_height()//2))
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
window.blit(self.plat,self.rect)
# Coins
class coin:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.coinss = pygame.image.load("coin_gold.png")
self.rect = pygame.Rect(x,y,coinss.get_width(), coinss.get_height())
self.plat = pygame.transform.scale(self.coinss,(self.coinss.get_width()//2,self.coinss.get_height()//2))
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
window.blit(self.coinss,self.rect)
# Floor
class floor:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
font = pygame.font.Font('freesansbold.ttf', 30)
score = 0
text = font.render('Gold = ' + str(score), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (100, 40)
# enemy
Sfont = pygame.font.Font('freesansbold.ttf', 30)
Kills = 0
Stext = Sfont.render('Kills = ' + str(score), True, (255,255,255))
textRectS = Stext.get_rect()
textRectS.center = (400, 100)
# fps
FPS = 60
clock = pygame.time.Clock()
# colors
Green = (63, 190, 22)
Blue = (22, 190, 175)
white = (240, 240, 240)
# define the enemy player coin classes
playerman = player(40,390,30,30, Blue)
enemy1 = platform(150,390,190,10, Green)
enemy2 = platform(300,310,190,10, Green)
enemy3 = platform(80,260,190,10, Green)
enemy4 = platform(250,180,190,10, Green)
enemy5 = platform(490,120,190,10, Green)
enemy6 = platform(-50,100,190,10, Green)
enemy7 = platform(180,50,190,10, Green)
platforms = [enemy1,enemy2,enemy3,enemy4,enemy5,enemy6,enemy7]
# coin class
coin1 = coin(180,320,50,50, Green)
coin2 = coin(350,250,50,50, Green)
coin3 = coin(150,200,50,50, Green)
Coins_list = [coin1,coin2,coin3]
# floor class
floor1 = floor(-1000,490,9999,50, white)
flories = [floor1]
#main loop
bullets = []
runninggame = True
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runninggame = False
if playerman.y < 250:
playerman.y += 1
for platform in platforms:
platform.y += playerman.speed
for coin in Coins_list:
coin.y += playerman.speed
for floor in flories:
floor.y += playerman.speed
for enes in florida:
enes.y += playerman.speed
if playerman.y > 450:
playerman.y -= playerman.fall
for platform in platforms:
platform.y -= playerman.fall
for coin in Coins_list:
coin.y -= playerman.fall
for floor in flories:
floor.y -= playerman.fall
for enes in florida:
enes.y -= playerman.fall
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.speed
else:
bullets.pop(bullets.index(bullet))
if len(bullets) < 2:
bullets.append(projectile(round(playerman.x+playerman.width//2), round(playerman.y + playerman.height//2), 6, (0,0,0)))
if keys[pygame.K_d]:
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x -= bullet.speed
else:
bullets.pop(bullets.index(bullet))
if len(bullets) < 2:
bullets.append(projectile(round(playerman.x+playerman.width//2), round(playerman.y + playerman.height//2), 6, (0,0,0)))
if keys[pygame.K_LEFT]:
playerman.direction = "left"
playerman.x -= playerman.speed
if playerman.x < 100:
playerman.x += playerman.speed
for platform in platforms:
platform.x += playerman.speed
for coin in Coins_list:
coin.x += playerman.speed
for enes in florida:
enes.x += playerman.speed
if keys[pygame.K_RIGHT]:
playerman.direction = "right"
playerman.x += playerman.speed
if playerman.x > 400:
playerman.x -= playerman.speed
for platform in platforms:
platform.x -= playerman.speed
for coin in Coins_list:
coin.x -= playerman.speed
for enes in florida:
enes.x -= playerman.speed
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
playerman.isJump = False
collide = False
for platform in platforms:
if playerman.rect.colliderect(platform.rect):
collide = True
playerman.isJump = False
playerman.y = platform.rect.top - playerman.height + 1
if playerman.rect.right > platform.rect.left and playerman.rect.left < platform.rect.left - playerman.width:
playerman.x = platform.rect.left - playerman.width
if playerman.rect.left < platform.rect.right and playerman.rect.right > platform.rect.right + playerman.width:
playerman.x = platform.rect.right
for i in range(len(Coins_list)-1,-1,-1):
if playerman.rect.colliderect(Coins_list[i].rect):
del Coins_list[i]
score += 1
text = font.render('Score = ' + str(score), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (100, 40)
for floor in flories:
if playerman.rect.colliderect(floor.rect):
collide = True
playerman.isJump = False
playerman.y = floor.rect.top - playerman.height + 1
if playerman.rect.right > floor.rect.left and playerman.rect.left < floor.rect.left - playerman.width:
playerman.x = floor.rect.left - playerman.width
if playerman.rect.left < floor.rect.right and playerman.rect.right > floor.rect.right + playerman.width:
playerman.x = floor.rect.right
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 500 - playerman.height
if collide:
if keys[pygame.K_UP]:
playerman.isJump = True
playerman.fall = 0
else:
if playerman.JumpCount > 0:
playerman.y -= (playerman.JumpCount*abs(playerman.JumpCount))*0.3
playerman.JumpCount -= 1
else:
playerman.JumpCount = 10
playerman.isJump = False
window.fill((74, 107, 104))
enems1.draw()
window.blit(Stext,textRectS)
for bullet in bullets:
bullet.draw(window)
window.blit(text,textRect)
for platform in platforms:
platform.draw()
for coin in Coins_list:
coin.draw()
playerman.draw()
for floor in flories:
floor.draw()
pygame.display.update()
pygame.quit()
blit(source, dest, area=None, special_flags=0) -> Rect
window.blit(win, self.color, (self.x,self.y), self.radius)
window.blit(win, (self.x,self.y))