[英]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.