Python Pygame 图像位置

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20165686/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 19:43:19  来源:igfitidea点击:

Pygame Image position

pythonpygame

提问by user2993584

I've recentley started using pygame to see what I could come up with and come across a problem which I can't find an answer to without this pygame.sprite.Sprite and rect things, my question is how do I find a position of an image since I need the position of it to calculate a rotation angle. If it helps, here's the code that i am using:

我最近开始使用 pygame 来看看我能想出什么并遇到一个问题,如果没有这个 pygame.sprite.Sprite 和 rect 的东西我就找不到答案,我的问题是我如何找到一个位置一个图像,因为我需要它的位置来计算旋转角度。如果有帮助,这是我正在使用的代码:

import sys, pygame, math, time;
from pygame.locals import *;
spaceship = ('spaceship.png')
mouse_c = ('crosshair.png')
backg = ('background.jpg')
fire_beam = ('beam.png')
pygame.init()
screen = pygame.display.set_mode((800, 600))
bk = pygame.image.load(backg).convert_alpha()
mousec = pygame.image.load(mouse_c).convert_alpha()
space_ship = pygame.image.load(spaceship).convert_alpha()
f_beam = pygame.image.load(fire_beam).convert_alpha()
clock = pygame.time.Clock()
pygame.mouse.set_visible(False)
space_ship_rect = space_ship.get_rect() #added
while True:
screen.blit(bk, (0, 0))
for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()
    elif event.type == MOUSEBUTTONDOWN and event.button == 1:
        print("Left Button Pressed")
    elif event.type == MOUSEBUTTONDOWN and event.button == 3:
        print("Right Button Pressed")
    if event.type == MOUSEMOTION:
        x1, y1 = pygame.mouse.get_pos()
        x2, y2 = space_ship_rect.x, space_ship_rect.y #added
        dx, dy = x2 - x1, y2 - y1
        rads = math.atan2(dx, dy)
        degs = math.degrees(rads)
        print degs
        pygame.transform.rotate(space_ship, degs)
        pygame.display.update()
pos = pygame.mouse.get_pos()
screen.blit(mousec, (pos))
#screen.blit(space_ship, (375, 300)) #space_ship_rect did not work here.
pygame.display.update()

采纳答案by furas

You can use .get_rect()for image to get image rectangle (pygame.Rect())

您可以使用.get_rect()for image 来获取图像矩形 ( pygame.Rect())

space_ship = pygame.image.load(spaceship).convert_alpha()

space_ship_rect = space_ship.get_rect()

and than you can get x, y, width, heightand even centerx, centery, centeretc.

比你可以得到xywidthheight甚至centerxcenterycenter等。

print space_ship_rect.x, space_ship_rect.y, 
print space_ship_rect.centerx, space_ship_rect.centery, 
print space_ship_rect.center
print space_ship_rect.left, space_ship_rect.right
print space_ship_rect.top, space_ship_rect.bottom
print space_ship_rect.topleft, space_ship_rect.bottomright
print space_ship_rect.width, space_ship_rect.height

by the way: .get_rect()works also with your screenand other pygame.Surface().

顺便说一句:.get_rect()也适用于您screen和其他人pygame.Surface()

But you can't assign new values to image so you have to keep space_ship_rectand change values in it (so use get_rect()only once to get image size)

但是您不能为图像分配新值,因此您必须保留space_ship_rect和更改其中的值(因此get_rect()只能使用一次来获取图像大小)

space_ship_rect.x = 100
space_ship_rect.y = 200
 # or
space_ship_rect.centerx = 100
space_ship_rect.centery = 200

If you change x, yrectangle recalculate centerx, centeryusing widthand height. If you change centerx, centeryrectangle recalculate xand y

如果更改xy矩形重新计算centerxcentery使用widthheight。如果您更改centerx,则centery矩形重新计算xy

You could create class with self.imagefor bitmap and self.rectfor image size and position.

您可以self.image为位图以及self.rect图像大小和位置创建类。

ps. you can use screen.blit(space_ship, space_ship_rect)

附:您可以使用screen.blit(space_ship, space_ship_rect)