簡體   English   中英

Fish Simulator 魚的生長方式快速和變形。 如何修復 Pygame

[英]Fish Simulator Fish Growing Way To Fast And Growing Out Of Shape. How To Fix Pygame

所以我試圖讓我的魚一點一點地長大,並像它原來的形象一樣長大,但是當它吃到一條小魚時,它會長得很快,即使我將小魚的生長速率和我的寬度設置為 1魚總是看起來比我的魚的高度大 有沒有辦法讓我釣到這個問題VIDEO正如你在視頻中看到的那樣,魚的高度越來越大,但它的寬度越來越小,它最終看起來像那樣並且它也在增長每次吃小魚時都非常快,即使我將生長率設置為 1

    class player:
        def __init__(self,x,y,height,width,color):
           #[.....]

        def get_rect(self):
            self.rect.topleft = (self.x,self.y)
            return self.rect
            pygame.draw.rect(self.color,self.rect)


                
        def draw(self):
          #[............]

        def collide(self, other_rect):
            return self.rect.colliderect(other_rect)



        def grow(self, dx, dy):
            self.width += 1
            self.height += 1
            self.right = [pygame.transform.scale(image, (self.width,self.height)) for image in self.right_original]
            self.left = [pygame.transform.scale(image, (self.width,self.height)) for image in self.left_original]
            playerman.rect = pygame.Rect(self.x, self.y, self.width, self.height)




然后在我的主循環中,每當我與魚發生碰撞時,我都會將它加 1,但它會增加我的寬度和高度,魚最終看起來很奇怪,而且魚吃東西時也會長到快速地。


        for blac in blacs:
            if playerman.collide(blac):
                blac.x = 880            
                playerman.grow(1, 1)
                blac.y = random.randint(0,800)
                print("collid")


我的完整代碼腳本

我懷疑問題是player class 圖像的初始重新縮放:

class player:

    def __init__( self, ... )
        # ...
        #   HERE---vvv  The //8 size change is ignored later
        self.right = [pygame.transform.scale(image,(image.get_width()//8,image.get_height()//8)) for image in self.right_original]
        self.left = [pygame.transform.scale(image,(image.get_width()//8,image.get_height()//8)) for image in self.left_original]

但是當魚在player.grow()中長大時,圖像是從最初加載的圖像中獲取的,而不是調整大小后的圖像。

    def grow(self, dx, dy):
        self.width += 1
        self.height += 1
        # HERE ---vvv  Using un-resized images
        self.right = [pygame.transform.scale(image, (self.width,self.height)) for image in self.right_original]
        self.left = [pygame.transform.scale(image, (self.width,self.height)) for image in self.left_original]
        playerman.rect = pygame.Rect(self.x, self.y, self.width, self.height)

    

解決這個問題的最好方法可能是正確地保持魚的目標大小。 因此,請同時考慮 /8 調整大小和 ++ 進食增量。 開始時可能將原始圖像調整為player.width.height

class player:
    def __init__(self,x,y,height,width,color):
        self.x      = x
        self.y      = y
        self.height = height
        self.width  = width
        self.color  = color
        self.speed  = 3
        self.isJump = True

        # load the sprite images
        rights = [pygame.image.load("r" + str(i) + ".png") for i in range(1, 13)]
        lefts  = [pygame.image.load("l" + str(i) + ".png") for i in range(1, 13)]
        # re-scale to make originals
        new_size = ( self.width, self.height )
        self.right_original = [ pygame.transform.scale( image, new_size ) for image in rights ]
        self.left_original  = [ pygame.transform.scale( image, new_size ) for image in lefts ]

這會為您提供一組尺寸正確的原始圖像。 然后你可以拿一份工作副本來即時調整大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM