兔子BUNNY 发表于 2020-3-26 08:54:07

pygame:用subsurface实现动画的精灵 怎么碰撞检测(进来帮忙@些大佬吧)未解决

本帖最后由 兔子BUNNY 于 2020-3-26 10:15 编辑

import pygame
from pygame.locals import *
from sys import exit


pygame.init()
bg_size = width,height = 1600,900
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption("cxk小游戏")
background = pygame.image.load("image/background.jpg")

class Cxk(pygame.sprite.Sprite):
    def __init__(self, filename, row, columns):
      pygame.sprite.Sprite.__init__(self)

      self.main_image = pygame.image.load(filename).convert_alpha()
      self.main_rect = self.main_image.get_rect()
      self.frame_width = self.main_rect.width//columns
      self.frame_height = self.main_rect.height//row
      self.rect = 0, 0, self.frame_width, self.frame_height
      self.columns = columns
      self.last_frame = row * columns - 1
      self.last_time = 0
      self.frame = 0
      self.first_frame = 0
      self.old_frame = 0
      
    def update(self, screen):
      self.frame += 1                                                   # 帧序号 +1
      if self.frame > self.last_frame:
            self.frame = self.first_frame                                 # 循环播放
      if self.frame != self.old_frame:
            frame_x = (self.frame % self.columns) * self.frame_width         # 计算 subsurface 的 x 坐标
            frame_y = (self.frame // self.columns) * self.frame_height         # 计算 subsurface 的 y 坐标
            rect = Rect(frame_x, frame_y, self.frame_width, self.frame_height) # 获取subsurface 的 rect
            self.image = self.main_image.subsurface(rect)                  # 更新self.image
            self.old_frame = self.frame                                        # 更新self.old_frame
      screen.blit(self.image, self.main_rect)                                     # 显示图像
    def move_right(self):
      self.main_rect.left +=20
      
    def move_down(self):
      self.main_rect.top +=20
      
class Cat(pygame.sprite.Sprite):
    def __init__(self,image,):
      pygame.sprite.Sprite.__init__(self)

      self.image = pygame.image.load(image).convert_alpha()
      self.rect = self.image.get_rect()
      self.rect.left, self.rect.right = 450,300
      
      

cxk = Cxk('image/cxk.png',1,16)

cat=Cat('image/cat.png')

framerate = pygame.time.Clock()

while True:
    framerate.tick(30)
    for event in pygame.event.get():
      if event.type == QUIT:
            exit()
    key_press = pygame.key.get_pressed()
    if key_press:
      cxk.move_right()
    if key_press:
      cxk.move_down()
   
    screen.blit(background, (0, 0))
    screen.blit(cat.image,(450,300))
    cxk.update(screen)

    if pygame.sprite.collide_rect(cat, cxk):
      print('cxk')
    pygame.display.update()


用的是序列图,是1行,16列

这个是重写来进行碰撞检测的
https://pan.baidu.com/s/1FMKSSONrrm2pgdXKjAedew

六小鸭 发表于 2020-3-26 09:40:18

https://blog.csdn.net/zzwlyj/article/details/82290004

六小鸭 发表于 2020-3-26 09:47:13

本帖最后由 六小鸭 于 2020-3-26 09:48 编辑

@一个账号
救救孩子!

一个账号 发表于 2020-3-26 09:50:09

请把所用到的素材解压缩发过来

兔子BUNNY 发表于 2020-3-26 10:15:51

一个账号 发表于 2020-3-26 09:50
请把所用到的素材解压缩发过来

好了

一个账号 发表于 2020-3-27 17:46:14

本帖最后由 一个账号 于 2020-3-30 17:31 编辑

兔子BUNNY 发表于 2020-3-26 10:15
好了

链接打不开

兔子BUNNY 发表于 2020-3-30 17:30:19

一个账号 发表于 2020-3-27 17:46
链接挂了

已经自己搞定了
页: [1]
查看完整版本: pygame:用subsurface实现动画的精灵 怎么碰撞检测(进来帮忙@些大佬吧)未解决