Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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
Animation pygame精灵未渲染或更新_Animation_Pygame_Render_Collision_Sprite - Fatal编程技术网

Animation pygame精灵未渲染或更新

Animation pygame精灵未渲染或更新,animation,pygame,render,collision,sprite,Animation,Pygame,Render,Collision,Sprite,工作原理: 1) 船舶和背景载荷无挂接。 2) 船舶运行正常 3) 我能够阻止飞船离开视野 4) 该程序在K_空格键的按下事件中创建像素(模拟子弹) 我需要帮助的是: 1) 尽管我在创造“子弹”后尽了最大的努力,精灵还是无法产生动画 2) 用于表示碎片的精灵甚至无法创建,更不用说动画了 3) 当然这意味着我甚至不能测试我的单位在子弹和碎片之间的碰撞 4) 不知道如何开始处理碎片(精灵)探测船 5) 出于某种原因,子弹精灵渲染到船的左侧。不确定在何处/如何操作其x值 现行守则: 我到处都留了便条来

工作原理:

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)