pygame精灵组有哪些方法_pygame精灵组需要帮助

在pygame游戏中,创建了一个Fist精灵类和Chimp精灵类。Fist类用于模拟拳头,Chimp类用于模拟圆圈。当拳头碰撞到圆圈时,圆圈应旋转360度。但在实现中,只有第一个创建的Chimp精灵能响应旋转,其余精灵无反应。问题在于更新精灵组时,只处理了第一个精灵的旋转效果。解决方案可能涉及更正精灵组的更新和交互逻辑。
摘要由CSDN通过智能技术生成

我修改了pygame黑猩猩的例子,用圆圈和一条线替换黑猩猩图像,使用从圆中心绘制的绘制方法,还将拳头替换为10×10的黑匣子表面。在

我的问题是这个。在

当黑匣子(拳头)击打圆圈(黑猩猩)时,圆圈(黑猩猩)必须旋转360度。对于在chimp类中描述的单圈精灵来说,它工作得很好,但是当我创建多个sprite并将它们添加到精灵组只有第一个被创造出来的精灵会旋转,而其他的圆精灵(黑猩猩)没有反应。谁能告诉我怎么解决这个问题吗。我使用的是python3x和pygame1.9#Import Modules

import os, pygame

from pygame.locals import *

from pygame.compat import geterror

import random

def load_image(x=40,y=40,r=0,g=0,b=0):

image = pygame.Surface((x,y))

image.fill((r,g,b))

pygame.draw.circle(image,(r,g,255),(20,20),10)

pygame.draw.line(image,(r,255,b),(20,20),(30,30),2)

image = image.convert()

image.set_colorkey((255,0,0))

return image, image.get_rect()

class Fist(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image,self.rect = load_image(x=10,y=10)

self.punching = 0

def update(self):

pos = pygame.mouse.get_pos()

self.rect.midtop = pos

if self.punching:

self.rect.move_ip(5,10)

def punch(self,target) :

if not self.punching:

self.punching = 1

hitbox = self.rect.inflate(-5,-5)

return hitbox.colliderect(target.rect)

def unpunch(self):

self.punching = 0

class Chimp (pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image,self.rect = load_image(r=255)

screen = pygame.display.get_surface()

self.area = screen.get_rect()

self.rect.topleft = random.randint(0,300),random.randint(0,300)

self.move = 0

self.dizzy = 0

def update(self):

if self.dizzy:

self._spin()

else:

self._walk()

def _walk(self):

newpos = self.rect.move((self.move,0))

if self.rect.left < self.area.left or self.rect.right > self.area.right:

self.move = -self.move

newpos = self.rect.move((self.move,0))

self.rect = newpos

def _spin(self) :

center = self.rect.center

self.dizzy = self.dizzy + 6

if self.dizzy >= 360:

self.dizzy = 0

self.image = self.original

else :

rotate = pygame.transform.rotate

self.image = rotate(self.original,self.dizzy)

self.rect = self.image.get_rect(center=center)

def punched(self):

if not self.dizzy:

self.dizzy = 1

self.original = self.image

def main():

pygame.init()

screen = pygame.display.set_mode((640,480))

background = pygame.Surface(screen.get_size())

background = background.convert()

background.fill((250,250,250))

screen.blit(background,(0,0))

pygame.display.flip()

clock = pygame.time.Clock()

fist = Fist()

allsprites = pygame.sprite.Group()

for i in range(10):

chimp = Chimp()

allsprites.add(chimp)

fistsprite = pygame.sprite.Group((fist))

going = True

while going:

clock.tick(60)

for event in pygame.event.get():

if event.type == QUIT:

going = False

elif event.type == MOUSEBUTTONDOWN:

for chimp in allsprites.sprites:

if fist.punch(chimp):

chimp.punched()

elif event.type == MOUSEBUTTONUP:

fist.unpunch()

allsprites.update()

fistsprite.update()

screen.blit(background,(0,0))

allsprites.draw(screen)

fistsprite.draw(screen)

pygame.display.flip()

pygame.quit()

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值