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)
我正在尝试在 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 …
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)