我尝试在Python v2.7上做一个简单的游戏(类似于danmaku射击游戏)
我对这部分有疑问
import os
from pygame import *
MOVE_SPEED = 3
WIDTH = 10
HEIGHT = 10
COLOR = "#F52525"
class Player(sprite.Sprite):
def __init__(self, x, y):
sprite.Sprite.__init__(self)
self.xvel = 0
self.yvel = 0
self.startX = x
self.startY = y
self.image = Surface((WIDTH,HEIGHT))
#self.image.fill(Color(COLOR))
self.image = image.load("images/player.png")
self.rect = Rect(x, y, WIDTH, HEIGHT)
" player.png"尺寸是40x60,但我需要在图像中心的实际尺寸10x10矩形,它将与游戏逻辑交互(可选择显示或不显示)。
答案 0 :(得分:1)
所以我想你想缩小图像? - 没有
修改
您需要偏移绘图和碰撞rect
-------- (x,y) drawing
|\ |
| \-- | (x+15,y+25) rect
| -- | (10,10)
| |
-------- (40,60)
所以基本上你想要在图像中发生碰撞。 https://www.pygame.org/docs/ref/sprite.html#pygame.sprite.collide_rect
def interact(something, player):
# note both Sprites must have a rect attributes
return pygame.sprite.collide_rect(something,player)
答案 1 :(得分:0)
您可能知道每个精灵都包含 image
(在表面上绘制)和 rect
对象(设置位置) image
和碰撞检测区域。)
您可以在rect
课程中创建新 player
对象...
self.collideRect = pygame.rect.Rect((0, 0), (10, 10))
...并将其位置设置为
self.collideRect.center = self.rect.center
每当您更改player
的位置时,您也必须调用此行,以便self.collideRect
rect对象"随您的{移动" 屏幕上显示{1}}。
要测试点(例如鼠标坐标)是否在player
内,请调用
self.collideRect
我希望这会有所帮助:)
答案 2 :(得分:0)
你需要在blit中使用rect参数:
screen.blit(image, dest, (x_crop, y_crop, width, height))
如果您想使用中心,则应定义图像功能blit(screen, dest)
:
screen.blit(self.image, dest, self.rect)