我刚刚开始我的第一个PyGame项目,我无法找到如何正确使用蒙版实体应用于移动的Surface。使用PyGame在移动表面上分配静态蒙版
我做了一个特定的类动画面
class LabelObject():
def __init__(self, surface, x, y, endX, speed, idleTime):
self.surface = surface
self.x = x
self.y = y
self.endX = endX
self.speed = speed
self.idleTime = idleTime
self.alpha = 255
self.timer_start = 0
self.timer_end = 0
self.pos = self.surface.get_rect(x=self.x,y=self.y)
def move(self):
self.timer_start += 1
if self.timer_start > self.idleTime:
if self.pos.right > self.endX:
self.pos.x += self.speed
elif self.pos.x < self.x:
self.timer_end += 1
if self.timer_end > self.idleTime:
self.alpha -= 25
if self.timer_end > self.idleTime + 11:
self.pos = self.surface.get_rect(x=self.x, y=self.y)
self.timer_start = 0
self.timer_end = 0
self.alpha = 255
self.surface.set_alpha(self.alpha)
这个类的重点是检查面超过给定区域,并向左滑动,以便能够读取整个文本中呈现它。
在我的主循环,我只是它的blit到屏幕这样
label = LabelObject(textSurface,20,10,100,-0.5,30)
while not over:
for event in pygame.event.get():
if event.type == pygame.QUIT
over = True
screen.fill((0,0,0))
label.move()
screen.blit(label.surface, label.pos)
pygame.display.update()
这工作得很好,但我需要申请就可以了面具不搬。对于这个例子,面具的Rect将是(20, 10, 100-20, label.surface.get_height())
。我在网上看到一些关于Mask的例子,但是当面具是静止的并且表面在移动时,我没有找到使用它的方法。
编辑:我尝试使用blit函数中的区域选项,但有一些奇怪的东西,面积和表面移动不同步。
编辑2:最后,这里是区域选项的良好blit功能。只是需要与静态位置的块传输,并与动画位置的区域:
self.screen.blit(label.surface, (label.x,label.y), area=pygame.Rect(label.x-label.pos.x, 0, label.endX-label.x, label.surface.get_height()))
如果你有'self.pos'('pygame.Rect'实例),那么你就不需要'self.x'和'self.y'因为你有'self.pos.x','self.pos.y','self.pos.width','self.pos.right'(而不是'self.pos [0] + self.pos [2] ''''''self.pos.center'等。您可以使用'get_rect(x = self.x,y = self.y)'代替'get_rect()。move(self.x,self.y) ' – furas
您可以使用'self.pos.x + = self.speed'来代替'self.pos = self.pos.move(self.speed,0)' – furas
@furas感谢您的意见,我会澄清我的班级有你的建议。 – mickaelb91