Python v2.7。 PyGame。 image.load 和 image.fill 之间的像素大小差异

Python v2.7. PyGame. Difference in pixels size between image.load and image.fill

我正在尝试在 Python v2.7 上制作一个简单的游戏(类似于弹幕射击游戏)

这部分我有问题

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 的矩形,它将与游戏逻辑交互(可以选择是否显示)。

所以我想你想缩小图像? -- 没有

编辑

你需要偏移绘图和碰撞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)

您可能知道每个精灵都包含一个 image(绘制在表面上)和一个 rect 对象(设置 image 的位置和碰撞检测区域)。

您可以在 player class …

中创建一个 new rect 对象
self.collideRect =  pygame.rect.Rect((0, 0), (10, 10))

…并将其位置设置为

self.collideRect.center = self.rect.center

每次更改 player 的位置时,您也必须调用此行,因此您的 self.collideRect 矩形对象 "moves"你的 player 在屏幕上。

要测试一个点(例如鼠标坐标)是否在 self.collideRect 内,请调用

if self.collideRect.collidepoint(x, y) == True:
    print("You clicked on me!")

希望对您有所帮助:)

您需要在 blit 中使用 rect 参数:

screen.blit(image, dest, (x_crop, y_crop, width, height))

如果你想使用中心你应该定义图像函数blit(screen, dest):

screen.blit(self.image, dest, self.rect)