我剛剛開始我的第一個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