import pygame
class Ship:
def __init__(self, ai_game):
self.screen = ai_game.screen
self.screen_rect = ai_game.screen.get_rect()
self.image = pygame.image.load('images/Ship_right.bmp') # 加载飞船图片
self.rect = self.image.get_rect()
self.rect.midbottom = self.screen_rect.midbottom
self.settings = ai_game.settings
self.x = float(self.rect.x)
# 移动标志
self.moving_left = False
self.moving_right = False
self.moving_up = False
self.moving_down = False
def update(self):
"""根据移动标志移动飞船"""
if self.moving_right and self.rect.right < self.screen_rect.right:
self.x += self.settings.ship_speed
if self.moving_left and self.rect.left > 0:
self.x -= self.settings.ship_speed
self.rect.x = self.x
def blitme(self):
"""构建飞船图像"""
self.screen.blit(self.image, self.rect)
import pygame
from pygame.sprite import Sprite
class Enemy(Sprite):
def __init__(self, game):
super().__init__()
self.screen = game.screen
self.screen_rect = game.screen.get_rect()
self.image = pygame.image.load('images/enemy_ship.bmp')
self.rect = self.image.get_rect()
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.x = float(self.rect.x)
一直不清楚self.x,self.rect.x到底指的是什么,是如何让矩形移动的
还有就是第二个代码块中的
self.rect.x = self.rect.width
self.rect.y = self.rect.height
说是将矩形放于左上角,但不知道原理是什么
求解,谢谢
常用的Rect参数形式是:pygame.Rect(left, top, width, height)
rect.right:矩形对象的右边缘,即右上顶点对应的x坐标(左上顶点的横坐标+矩形对象的长)。
rect.left:矩形对象的左边缘,即左上顶点对应的x坐标。
rect.top:矩形对象的上边缘,即左上顶点对应的y坐标。
rect.bottom:矩形对象的下边缘,即左下顶点对应的y坐标(左上顶点的纵坐标+矩形对象的高)。
rect.x:矩形对象的左边缘,即左下顶点对应的 x坐标。
rect.y:矩形对象的上边缘,即左上顶点对应的 y坐标。
因此:
rect.x = rect.bottom = rect.top + rect.height
rect.y = rect.top
rect.right = rect.left + rect.width
就是把x坐标设置为它的长,y坐标设置为它的宽,实现空了一个Enemy的效果:
# ----------
# ---------- ← height
# ----------
# ↑ ----------
# width ---------- ← Enemy
# ----------