【发布时间】:2021-12-14 00:52:41
【问题描述】:
我很想知道当我将鼠标悬停在马铃薯上时,它是如何以及为什么会变得更加像素化,直到它达到 16x16 像素的马铃薯图像?我自己真的不知道从哪里开始解释。
main.py
import pygame
import math
import random
from potato import Potato
knife = pygame.image.load("knife.png")
knife = pygame.transform.rotate(knife, 270)
knife = pygame.transform.scale(knife, (200, 200))
potato = pygame.image.load("potato.png")
potato = pygame.transform.scale(potato, (200, 160))
WIDTH, HEIGHT = 800, 500
window = pygame.display.set_mode((WIDTH, HEIGHT))
def main():
done = False
potatoThing = Potato(knife, potato, WIDTH/2-100, HEIGHT/2 - 80)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
mousex, mousey = pygame.mouse.get_pos()
window.fill((195, 245, 98))
potatoThing.draw(window)
potatoThing.update(mousex, mousey)
pygame.display.update()
pygame.quit()
main()
土豆.py
import pygame
import math
import random
from pygame.math import Vector2 as vect
def distanceBecauseMeep(min, max, value):
if value < min:
return min
elif value > max:
return max
else:
return value
class Potato:
def __init__(self, sprite1, sprite2, x, y):
self.knifeSprite = sprite1
self.potatoSprite = sprite2
self.pos = vect(x, y)
self.isHoveringOver = False
self.sizeOfPotato = (200, 160)
self.sizeOfKnife = (200, 200)
def draw(self, win):
if self.isHoveringOver:
self.sizeOfPotato = (220, 180)
self.sizeOfKnife = (220, 220)
else:
self.sizeOfPotato = (200, 160)
self.sizeOfKnife = (200, 200)
self.potatoSprite = pygame.transform.scale(self.potatoSprite, self.sizeOfPotato)
self.knifeSprite = pygame.transform.scale(self.knifeSprite, self.sizeOfKnife)
win.blit(self.potatoSprite, (self.pos))
win.blit(self.knifeSprite, (self.pos))
def update(self, xPos, yPos):
self.x = xPos
self.y = yPos
self.CosX = distanceBecauseMeep(self.pos.x, self.pos.x + self.sizeOfPotato[0], self.x)
self.CosY = distanceBecauseMeep(self.pos.y, self.pos.y + self.sizeOfPotato[1], self.y)
self.distance = math.sqrt((self.CosX - self.x)**2 + (self.CosY - self.y)**2)
if self.distance <= 0.0:
self.isHoveringOver = True
else:
self.isHoveringOver = False
这里有一些图片可以帮助说明我的观点和困惑
当你第一次启动程序时:
当你将鼠标悬停在它上面几次时
它可能与potato.py 中的元组有关,但我不太确定。我真的很困惑,甚至不知道这是图像像素化的可能性。
试过了
pygame.transform.smoothscale
但所做的只是模糊图像而不是像素化图像
【问题讨论】:
-
@RandomDavis 我试过
pygame.transform.smoothscale它所做的只是让它变得模糊而不是像素化 -
您是否曾尝试在实际的图像编辑程序中反复缩小和放大图像?发生什么了?为什么?
-
这是因为我反复缩放同一张图片