鱼C论坛

 找回密码
 立即注册
查看: 9068|回复: 50

[已解决]pygame 天体运动模拟

[复制链接]
发表于 2023-7-25 11:41:50 | 显示全部楼层

哈哈哈哈哈哈哈我来了,先看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 11:55:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:00:51 | 显示全部楼层
第69行的地方:
  1. self.rect.topright = [x / SCALE for x in pos]
  2.         print(self.rect.topright)
复制代码


我只能感觉出来你的描述里问题应该在这里

你的算法肯定有问题,而且在拖动屏幕的时候会一直调用Flush,出现了一些新的bug
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:01:14 | 显示全部楼层
更具体的暂时想不出来了,我吃个饭先
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:04:21 | 显示全部楼层
你想用鼠标滚轮做缩放?这是个好的想法,但是。。。。建议先在别的更简单的程序做一些测试,保证你写的算法没有问题,我平时都是这样的
1690257807095.jpg

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
python爱好者. + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:06:24 | 显示全部楼层
问题:为什么每次设置 Message 的值的时候,Message 都会自动向左移动?

我没有理解你希望它怎么样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:09:21 | 显示全部楼层
哦!我懂,你是说像让他像原先那样到右边藏起来?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:25:25 | 显示全部楼层
69行的这个是不是应该只有在动滚轮的时候才触发,是这个赋值导致的这玩意一直向左移动。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:25:42 | 显示全部楼层
不看了先炫饭了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:37:06 | 显示全部楼层


  1. self.rect.topright = [x / SCALE for x in pos]
复制代码


pos 就是 self.rect.topright, 因为x / SCALE , screen_scale = 125, SCALE=1.25 ,1.25> 1
所以 pos会越来越小,导致向左移动,所以我才问是不是这玩意应该在动滚轮的时候才调用

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:40:24 | 显示全部楼层
所以当screen_scale < 100 时,调用settext会使它向右移动
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:12:26 | 显示全部楼层    本楼为最佳答案   
试试这样:

  1.     def flush(self, pos):
  2.         #print("原先:",self.rect.x)
  3.         self.image = font.render(self._text, False, (255, 255, 255))
  4.         self.image = pygame.transform.scale(self.image, [x / SCALE for x in self.image.get_size()])
  5.         self.rect = self.image.get_rect()
  6.         #self.rect.topright = [x / SCALE for x in pos]
  7.         self.rect.x = 1000/SCALE - self.rect.right
  8.         self.rect.y = pos[1] / SCALE
  9.         print(self.rect.x,self.rect.y)
  10.         
复制代码

应该符合你的要求了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:14:01 | 显示全部楼层
还有好像有个bug:

在两个行星相撞之后,再过几秒,就会一直连续的调用settext,不知道为啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:15:59 | 显示全部楼层
歌者文明清理员 发表于 2023-7-25 13:13
所以 debug 下来bug在哪里


这次你的bug应该是Mess对象的x轴由于SCALE的影响一直在变小
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:18:06 | 显示全部楼层
1690262235932.jpg
这是为啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:29:08 | 显示全部楼层
歌者文明清理员 发表于 2023-7-25 13:23
刚才那个问题我找到原因了,因为重复使用topright导致x一直减小
但是如果我不让x减小又看不见
所以我让 ...

你是说轨迹和球不在一块?还是右上角的字不清楚?

子不清楚是因为分辨率太小了,有的像素没画出来,放大了就这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 14:25:35 | 显示全部楼层
第194行:
  1.     for sprite in sprites:
  2.         rect1 = sprite.rect
  3.         image = sprite.image
  4.         image = pygame.transform.scale(image, (sprite.radius * 2 * scale,) * 2)
  5.         rect2 = image.get_rect()
  6.         rect2.x = rect1.x
  7.         rect2.y = rect1.y
  8.         print(rect1.centerx-rect2.centerx, rect1.centery-rect2.centery)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 14:26:48 | 显示全部楼层
你看看,这种无法跟随的情况应该是由于图像变大变小导致的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 14:27:34 | 显示全部楼层
你应该想办法是轨道的生成位置始终保持在星球的center上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 14:28:10 | 显示全部楼层
还有!下次要写注释!看的累死我了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-2 02:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表