当前位置: 首页 >  在线学习 >  解决一个小问题

解决一个小问题

导读:在python教材《Python编程:从入门到实践》这本书中的第十二到第十四章的小游戏教程的基础上,我试着根据教程来做一个我自己感兴趣的游戏,游戏内容都是我自己比较喜欢的元素。之后的一段时间我将记录游戏的制作过程。.同样的,我设定了游戏敌人,游戏敌人的移动速度我设定为self.a

在python教材《Python编程:从入门到实践》这本书中的第十二到第十四章的小游戏教程的基础上,我试着根据教程来做一个我自己感兴趣的游戏,游戏内容都是我自己比较喜欢的元素。之后的一段时间我将记录游戏的制作过程。

同样的,我设定了游戏敌人,游戏敌人的移动速度我设定为self.amary1_speed_factor = 0.1,然后我最开始使用的是下面这串代码来实现敌人向着游戏角色靠拢的效果。

def attract(self, kate, Newsetting):
        distance_x = self.rect.centerx - kate.rect.centerx
        distance_y = self.rect.centery - kate.rect.centery
        distance = (distance_y ** 2 + distance_x ** 2) ** 0.5  
#计算敌人和玩家kate之间的距离

        if distance != 0:
            attract_x = self.Newsetting.amary1_speed_factor * (distance_x / distance)
            attract_y = self.Newsetting.amary1_speed_factor * (distance_y / distance)  
#使用三角函数计算出横坐标和纵坐标需要移动的距离

            self.rect.centerx -= attract_x
            self.rect.centery -= attract_y  
#横纵坐标分别移动

但是出错了,敌人amary1生成后站在原地不动,在网上查了一下以后我知道了rect这一类的内容只能是整数,就算给了小数也会自动取最近的整数。然后根据网络上的别人的解答,说是需要使用别的变量来储存rect.x和rect.y,于是

     self.centerx =float(self.rect.centerx)
        self.centery =float(self.rect.centery)


    def attract(self, kate, Newsetting):
        distance_x = self.centerx - kate.rect.centerx
        distance_y = self.centery - kate.rect.centery
        distance = (distance_y ** 2 + distance_x ** 2) ** 0.5

        if distance != 0:
            attract_x = self.Newsetting.amary1_speed_factor * (distance_x / distance)
            attract_y = self.Newsetting.amary1_speed_factor * (distance_y / distance)

            self.centerx -= attract_x
            self.centery -= attract_y

            self.rect.centerx = self.centerx
            self.rect.centery = self.centery

使用了self.centerx和y来储存浮点数,再在最后赋值回来。这样就解决了只能整数移动的问题。

其实这个问题在书中教程已经解决了,书中已经使用过了类似的方法,只是没有说明为什么,这对于没有听课只有自学的人来说是很难搞懂为什么的。

内容
  • 浏览器缓存原理
    浏览器缓存原理
    2023-12-03
    本文可以配合本人录制的视频一起食用.目的.通常说到浏览器缓存,大多是和性能优化有关,使用缓存,通常是两个主要目的,第一是
  • 30个接口自动化测试面试题,赶紧收藏
    30个接口自动化测试面试题,赶紧
    2023-12-05
    1. 什么是接口自动化测试?.答:接口自动化测试是指使用自动化工具对接口进行测试,验证接口的正确性、稳定性和性能等方面的
  • 「微服务」这10道Consul面试题值得一看
    「微服务」这10道Consul面
    2023-12-06
    前言.Consul 是一种非常强大的分布式服务发现和配置管理工具 ,它可以帮助开发人员和运维人员更好地管理和维护分布式系
  • 计算机网络概念汇总
    计算机网络概念汇总
    2023-12-05
    1. 模型结构.五层模型 :.应用层、传输层、网络层、数据链路层、物理层。.应用层 :为应用程序提供交互服务。在互联网中
  • 代码的坏味道(二)——为什么建议使用模型来替换枚举?
    代码的坏味道(二)——为什么建议
    2023-12-02
    为什么建议使用对象来替换枚举?.在设计模型时,我们经常会使用枚举来定义类型,比如说,一个员工类 Employee,他有职
  • .NET现代应用的产品设计 - DDD实践
    .NET现代应用的产品设计 -
    2023-12-03
    统一术语(战略设计).我们将通过DDD完成业务与技术的完整落地.统一.领域模型术语.DDD模式名称.技术.技术设计术语.