Animation pygame精灵未渲染或更新
工作原理: 1) 船舶和背景载荷无挂接。 2) 船舶运行正常 3) 我能够阻止飞船离开视野 4) 该程序在K_空格键的按下事件中创建像素(模拟子弹) 我需要帮助的是: 1) 尽管我在创造“子弹”后尽了最大的努力,精灵还是无法产生动画 2) 用于表示碎片的精灵甚至无法创建,更不用说动画了 3) 当然这意味着我甚至不能测试我的单位在子弹和碎片之间的碰撞 4) 不知道如何开始处理碎片(精灵)探测船 5) 出于某种原因,子弹精灵渲染到船的左侧。不确定在何处/如何操作其x值 现行守则: 我到处都留了便条来解释我的疯狂Animation pygame精灵未渲染或更新,animation,pygame,render,collision,sprite,Animation,Pygame,Render,Collision,Sprite,工作原理: 1) 船舶和背景载荷无挂接。 2) 船舶运行正常 3) 我能够阻止飞船离开视野 4) 该程序在K_空格键的按下事件中创建像素(模拟子弹) 我需要帮助的是: 1) 尽管我在创造“子弹”后尽了最大的努力,精灵还是无法产生动画 2) 用于表示碎片的精灵甚至无法创建,更不用说动画了 3) 当然这意味着我甚至不能测试我的单位在子弹和碎片之间的碰撞 4) 不知道如何开始处理碎片(精灵)探测船 5) 出于某种原因,子弹精灵渲染到船的左侧。不确定在何处/如何操作其x值 现行守则: 我到处都留了便条来
bif="bg.jpg"
ship = "spaceship.png"
import pygame, sys
from pygame import *
from pygame.locals import *
import random
pygame.init()
yellow=(255,255,51)
green=(50,190,50)
difficulty = 10
i=0
debris_list=pygame.sprite.Group()
bullet_list=pygame.sprite.Group()
class Square(pygame.sprite.Sprite):#makes squares
def __init__(self, color):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface ([7,7])
self.image.fill(color)
self.rect=self.image.get_rect()
class Bullet(pygame.sprite.Sprite): #bullet creation
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image= pygame.Surface([7,7])
self.image.fill(yellow)
self.rect= self.image.get_rect()
def update(self): #sprite movement
if bullet:
self.rect.y-=5
if debris:
self.rect.y+=5
class debris(pygame.sprite.Sprite): #debris creation
def __init__(self,color):
pygame.sprite.Sprite.__init__(self)
self.image= pygame.Surface([15,15])
self.image.fill(green)
self.rect= self.image.get_rect()
window =pygame.display.set_caption("Space Explorer")
clock=pygame.time.Clock()
speed=250
screen = pygame.display.set_mode((800,600),0,32)
x,y =0,0
movex,movey= 0,0
background = pygame.image.load(bif).convert() # puts background on screen
ship_pos=pygame.image.load(ship).convert_alpha() #loads player ship
while True:
for event in pygame.event.get():
if event.type == QUIT: #escape functionality
pygame.quit()
sys.exit()
if event.type == KEYDOWN: #ship movement
if event.key == K_LEFT:
movex=-1
elif event.key == K_RIGHT:
movex=+1
elif event.key ==K_UP:
movey=-1
elif event.key ==K_DOWN:
movey=+1
elif event.key == K_a:
movex=-1
elif event.key == K_d:
movex=+1
elif event.key ==K_w:
movey=-1
elif event.key ==K_s:
movey=+1
if event.type==KEYUP:
if event.key == K_LEFT:
movex=0
elif event.key == K_RIGHT:
movex=0
elif event.key ==K_UP:
movey=0
elif event.key ==K_DOWN:
movey=0
elif event.key == K_a:
movex=0
elif event.key == K_d:
movex=0
elif event.key ==K_w:
movey=0
elif event.key ==K_s:
movey=0
if event.type == KEYDOWN:#player input bullet creation:
if event.key==K_SPACE:
bullet = Bullet()
bullet.rect.x=x
bullet.rect.y=y
bullet_list.add(bullet)
#hit tracking and score
#no collision detection for debris and ship yet.
for bullet in bullet_list:
debris_hit_list=pygame.sprite.spritecollide(bullet,debris_list,True)
for debris in debris_hit_list:
bullet_list.remove(bullet)
score+1
print score
if bullet.rect.y<10:
bullet_list.remove(bullet)#stop tracking rogue bullets
#debris spawn location and rate
#every 10 iterations "debris" should spawn randomly on the x axis
#and move downwards
if i == difficulty:
debris = Square(green)
debris.rect.x= random.randrange(800)
debris.rect.y=-700
debris_list.add(debris)
i=0
i=i+1
bullet_list.update()
debris_list.update()
#keeps ship within screen
if x >=680:
x=680
if x <= 5:
x=5
if y >=500:
y= 500
if y <=5:
y=5
x+=movex
y+=movey
bullet_list.draw(screen)
debris_list.draw(screen)
screen.blit(background, (0,0))
screen.blit(ship_pos,(x,y))
pygame.display.update()
bif=“bg.jpg”
ship=“spaceship.png”
导入pygame,sys
从pygame导入*
从pygame.locals导入*
随机输入
pygame.init()
黄色=(255255,51)
绿色=(50190,50)
难度=10
i=0
碎片列表=pygame.sprite.Group()
bullet\u list=pygame.sprite.Group()
班级广场(pygame.sprite.sprite):#制作广场
定义初始化(自身,颜色):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface([7,7])
self.image.fill(颜色)
self.rect=self.image.get_rect()
类子弹(pygame.sprite.sprite):#子弹创建
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface([7,7])
self.image.fill(黄色)
self.rect=self.image.get_rect()
def更新(自我):#精灵运动
如果项目符号:
自校正y-=5
如果有碎片:
自校正y+=5
类碎片(pygame.sprite.sprite):#碎片创建
定义初始化(自身,颜色):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface([15,15])
self.image.fill(绿色)
self.rect=self.image.get_rect()
window=pygame.display.set_标题(“空间浏览器”)
clock=pygame.time.clock()
速度=250
screen=pygame.display.set_模式((800600),0,32)
x、 y=0,0
movex,movey=0,0
background=pygame.image.load(bif.convert()#在屏幕上显示背景
ship_pos=pygame.image.load(ship.convert_alpha()#加载玩家飞船
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:#转义功能
pygame.quit()
sys.exit()
如果event.type==KEYDOWN:#船舶移动
如果event.key==K_LEFT:
movex=-1
elif event.key==K_RIGHT:
movex=+1
elif event.key==K_UP:
movey=-1
elif event.key==K_DOWN:
movey=+1
elif event.key==K_a:
movex=-1
elif event.key==K\u d:
movex=+1
elif event.key==K_w:
movey=-1
elif event.key==K_s:
movey=+1
如果event.type==KEYUP:
如果event.key==K_LEFT:
movex=0
elif event.key==K_RIGHT:
movex=0
elif event.key==K_UP:
movey=0
elif event.key==K_DOWN:
movey=0
elif event.key==K_a:
movex=0
elif event.key==K\u d:
movex=0
elif event.key==K_w:
movey=0
elif event.key==K_s:
movey=0
如果event.type==KEYDOWN:#播放器输入项目符号创建:
如果event.key==K_空格:
bullet=bullet()
bullet.rect.x=x
bullet.rect.y=y
项目符号列表。添加(项目符号)
#命中跟踪和得分
#尚未对碎片和船舶进行碰撞检测。
对于项目符号列表中的项目符号:
碎片命中列表=pygame.sprite.spritecollide(子弹,碎片列表,真)
对于碎片命中列表中的碎片:
项目符号列表。删除(项目符号)
得分+1
打印分数
如果bullet.rect.y=680:
x=680
如果x=500:
y=500
如果y(对不起我的英语)
1) 在Bullet.update()中使用
如果项目符号:
自校正y-=5
如果有碎片:
自校正y+=5
但子弹和碎片的目标是
A:未定义(在代码开头)
B:返回false(我想)
但如果它们都返回真值,子弹就会留在同一个地方
2) 从不使用碎片类(使用rect类)
碎屑y=-700屏幕上方是什么
3) 我认为这种冲突是有效的
4) 定义一个Ship\u Rect并执行
碎片清单中d的:
如果船舶直线碰撞直线(d.Rect):
//当船撞到碎片时要做的事情
5) 对象的X和Y位于左上角,您应该执行以下操作:
bullet.rect.x=x+(船直高度/2)
bullet.rect.y=y+(装运长度/2)