鱼C论坛

 找回密码
 立即注册

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

[复制链接]
 楼主| 发表于 2023-7-25 12:35:12 | 显示全部楼层

突然有了那么一点点思路

Snipaste_2023-07-25_12-34-48.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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会越来越小,导致向左移动,所以我才问是不是这玩意应该在动滚轮的时候才调用

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:40:24 | 显示全部楼层
所以当screen_scale < 100 时,调用settext会使它向右移动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 12:41:55 | 显示全部楼层
cjjJasonchen 发表于 2023-7-25 12:37
pos 就是 self.rect.topright, 因为x / SCALE , screen_scale = 125, SCALE=1.25 ,1.25> 1
所 ...


似乎确实是这样
那么怎么自适应 125%的电脑呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 12:53:47 | 显示全部楼层
**问题解答:**

根据您提供的代码和图片,我看到您使用pygame进行天体运动模拟,并且每次设置Message的值时,它会自动向左移动。通过代码分析,我认为问题出现在以下两处:

1.    x_pos -= 1   :在代码中,每次更新Message的位置时,有一个   x_pos -= 1   的操作,将Message的x坐标减去1。这导致了Message向左移动。

2. 缺少事件处理:您的代码没有包含事件处理的部分,在游戏循环中没有处理键盘事件或退出事件。这可能导致Message的位置无法被正确控制,从而导致出现自动移动的问题。

解决这个问题,您可以尝试以下方法:

1. 确保Message的位置只在需要时更新,不要在每次循环中都减去1。如果您希望Message只水平移动一次,可以将   x_pos -= 1   这行代码放在合适的位置,例如在用户按下特定键时触发。

2. 添加事件处理的代码,包括处理键盘事件和退出事件。您可以使用pygame.event模块来处理这些事件,并根据需要更新Message的位置。

以下是一个简单的示例代码,展示了如何处理键盘事件和退出事件,以及根据事件更新Message的位置:
import pygameimport sys# 初始化pygamepygame.init()# 设置窗口大小和标题width, height = 800, 600screen = pygame.display.set_mode((width, height))pygame.display.set_caption("天体运动模拟")# 创建Message对象并设置初始位置message_font = pygame.font.Font(None, 36)message_text = "Hello, World!"message_color = (255, 255, 255)message_surface = message_font.render(message_text, True, message_color)message_rect = message_surface.get_rect()message_rect.center = (width // 2, height // 2)while True:    for event in pygame.event.get():        if event.type == pygame.QUIT:  # 处理退出事件            pygame.quit()            sys.exit()        if event.type == pygame.KEYDOWN:  # 处理键盘按下事件            if event.key == pygame.K_LEFT:  # 当按下左箭头键时,更新Message的位置                message_rect.x -= 10    screen.fill((0, 0, 0))  # 清屏    # 绘制Message    screen.blit(message_surface, message_rect)    pygame.display.flip()  # 更新显示
请注意,这只是一个示例代码,您可以根据自己的需求进行修改和扩展。通过添加事件处理的代码和适当控制Message的位置更新,您应该能够解决Message自动向左移动的问题。

希望这能帮助到您。如有任何进一步的问题,请随时提问。求给个最佳答案,非常感谢
只要点击我的回复贴写着发表时间的那一栏的绿色按钮即可!-->

                               
登录/注册后可看大图


此回答源于ChatGPT,若有不正确之处,请多包容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:12:26 | 显示全部楼层    本楼为最佳答案   
试试这样:
    def flush(self, pos):
        #print("原先:",self.rect.x)
        self.image = font.render(self._text, False, (255, 255, 255))
        self.image = pygame.transform.scale(self.image, [x / SCALE for x in self.image.get_size()])
        self.rect = self.image.get_rect()
        #self.rect.topright = [x / SCALE for x in pos]
        self.rect.x = 1000/SCALE - self.rect.right
        self.rect.y = pos[1] / SCALE
        print(self.rect.x,self.rect.y)
        
应该符合你的要求了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:13:45 | 显示全部楼层

所以 debug 下来bug在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在两个行星相撞之后,再过几秒,就会一直连续的调用settext,不知道为啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在两个行星相撞之后,再过几秒,就会一直连续的调用settext,不知道为啥

线程,我设置了相撞之后显示消息,然后文字一个一个减少,会调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


这次你的bug应该是Mess对象的x轴由于SCALE的影响一直在变小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:17:23 | 显示全部楼层
cjjJasonchen 发表于 2023-7-25 13:15
这次你的bug应该是Mess对象的x轴由于SCALE的影响一直在变小

o
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:18:06 | 显示全部楼层
1690262235932.jpg
这是为啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:19:59 | 显示全部楼层

第一次见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:23:42 | 显示全部楼层

刚才那个问题我找到原因了,因为重复使用topright导致x一直减小
但是如果我不让x减小又看不见
所以我让 Width 减小了

另外你给的和我自己改的都有一个问题


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:27:48 | 显示全部楼层
学习编程中的Ben 发表于 2023-7-25 12:53
**问题解答:**

根据您提供的代码和图片,我看到您使用pygame进行天体运动模拟,并且每次设置Message的值 ...

ok,点了

2023-07-25-13-26-51.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

子不清楚是因为分辨率太小了,有的像素没画出来,放大了就这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:29:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:32:09 | 显示全部楼层
cjjJasonchen 发表于 2023-7-25 13:29
你是说轨迹和球不在一块?还是右上角的字不清楚?

子不清楚是因为分辨率太小了,有的像素没画出来,放 ...

不在一块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-25 13:34:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 13:45:43 | 显示全部楼层

有,我要贡献
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 22:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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