栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

逐步将精灵移动到鼠标单击位置

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

逐步将精灵移动到鼠标单击位置

假设当前位置是

pos
,点点击播放器
target_pos
,然后采取之间的矢量
pos
target_pos

现在您知道了如何从

pos
到达
target_pos
,但是要以恒定速度(而不是一次移动整个距离)移动,必须对向量进行归一化,并通过标量乘法应用速度常数。

而已。


完整示例:( 相关代码在

Ship.update
方法中)

import pygameclass Ship(pygame.sprite.Sprite):    def __init__(self, speed, color):        super().__init__()        self.image = pygame.Surface((10, 10))        self.image.set_colorkey((12,34,56))        self.image.fill((12,34,56))        pygame.draw.circle(self.image, color, (5, 5), 3)        self.rect = self.image.get_rect()        self.pos = pygame.Vector2(0, 0)        self.set_target((0, 0))        self.speed = speed    def set_target(self, pos):        self.target = pygame.Vector2(pos)    def update(self):        move = self.target - self.pos        move_length = move.length()        if move_length < self.speed: self.pos = self.target        elif move_length != 0: move.normalize_ip() move = move * self.speed self.pos += move        self.rect.topleft = list(int(v) for v in self.pos)def main():    pygame.init()    quit = False    screen = pygame.display.set_mode((300, 300))    clock = pygame.time.Clock()    group = pygame.sprite.Group(        Ship(1.5, pygame.Color('white')),        Ship(3.0, pygame.Color('orange')),        Ship(4.5, pygame.Color('dodgerblue')))    while not quit:        for event in pygame.event.get(): if event.type == pygame.QUIT:     return  if event.type == pygame.MOUSEBUTTONDOWN:     for ship in group.sprites():         ship.set_target(pygame.mouse.get_pos())        group.update()        screen.fill((20, 20, 20))        group.draw(screen)        pygame.display.flip()        clock.tick(60)if __name__ == '__main__':    main()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645608.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号