歌者文明清理员
发表于 2023-7-25 12:35:12
cjjJasonchen 发表于 2023-7-25 12:25
不看了先炫饭了
突然有了那么一点点思路
cjjJasonchen
发表于 2023-7-25 12:37:06
self.rect.topright =
pos 就是 self.rect.topright, 因为x / SCALE , screen_scale = 125, SCALE=1.25 ,1.25> 1
所以 pos会越来越小,导致向左移动,所以我才问是不是这玩意应该在动滚轮的时候才调用
cjjJasonchen
发表于 2023-7-25 12:40:24
所以当screen_scale < 100 时,调用settext会使它向右移动
歌者文明清理员
发表于 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%的电脑呢
学习编程中的Ben
发表于 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 pygame
import sys
# 初始化pygame
pygame.init()
# 设置窗口大小和标题
width, height = 800, 600
screen = 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自动向左移动的问题。
希望这能帮助到您。如有任何进一步的问题,请随时提问。求给个最佳答案,非常感谢{:10_254:}
只要点击我的回复贴写着发表时间的那一栏的绿色按钮即可!-->https://i.imgtg.com/2023/07/24/Oh0mQB.png
此回答源于ChatGPT,若有不正确之处,请多包容
cjjJasonchen
发表于 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, )
self.rect = self.image.get_rect()
#self.rect.topright =
self.rect.x = 1000/SCALE - self.rect.right
self.rect.y = pos / SCALE
print(self.rect.x,self.rect.y)
应该符合你的要求了
歌者文明清理员
发表于 2023-7-25 13:13:45
cjjJasonchen 发表于 2023-7-25 13:12
试试这样:
所以 debug 下来bug在哪里{:10_277:}
cjjJasonchen
发表于 2023-7-25 13:14:01
还有好像有个bug:
在两个行星相撞之后,再过几秒,就会一直连续的调用settext,不知道为啥
歌者文明清理员
发表于 2023-7-25 13:15:43
cjjJasonchen 发表于 2023-7-25 13:14
还有好像有个bug:
在两个行星相撞之后,再过几秒,就会一直连续的调用settext,不知道为啥
线程,我设置了相撞之后显示消息,然后文字一个一个减少,会调用
cjjJasonchen
发表于 2023-7-25 13:15:59
歌者文明清理员 发表于 2023-7-25 13:13
所以 debug 下来bug在哪里
这次你的bug应该是Mess对象的x轴由于SCALE的影响一直在变小
歌者文明清理员
发表于 2023-7-25 13:17:23
cjjJasonchen 发表于 2023-7-25 13:15
这次你的bug应该是Mess对象的x轴由于SCALE的影响一直在变小
o
cjjJasonchen
发表于 2023-7-25 13:18:06
这是为啥
歌者文明清理员
发表于 2023-7-25 13:19:59
cjjJasonchen 发表于 2023-7-25 13:18
这是为啥
{:10_277:}第一次见
歌者文明清理员
发表于 2023-7-25 13:23:42
cjjJasonchen 发表于 2023-7-25 13:18
这是为啥
刚才那个问题我找到原因了,因为重复使用topright导致x一直减小
但是如果我不让x减小又看不见
所以我让 Width 减小了
另外你给的和我自己改的都有一个问题
https://img1.imgtp.com/2023/07/25/vVFFPr4b.png
歌者文明清理员
发表于 2023-7-25 13:27:48
学习编程中的Ben 发表于 2023-7-25 12:53
**问题解答:**
根据您提供的代码和图片,我看到您使用pygame进行天体运动模拟,并且每次设置Message的值 ...
ok,点了
cjjJasonchen
发表于 2023-7-25 13:29:08
歌者文明清理员 发表于 2023-7-25 13:23
刚才那个问题我找到原因了,因为重复使用topright导致x一直减小
但是如果我不让x减小又看不见
所以我让 ...
你是说轨迹和球不在一块?还是右上角的字不清楚?
子不清楚是因为分辨率太小了,有的像素没画出来,放大了就这样
学习编程中的Ben
发表于 2023-7-25 13:29:11
歌者文明清理员 发表于 2023-7-25 13:27
ok,点了
QAQ
歌者文明清理员
发表于 2023-7-25 13:32:09
cjjJasonchen 发表于 2023-7-25 13:29
你是说轨迹和球不在一块?还是右上角的字不清楚?
子不清楚是因为分辨率太小了,有的像素没画出来,放 ...
不在一块
歌者文明清理员
发表于 2023-7-25 13:34:13
学习编程中的Ben 发表于 2023-7-25 13:29
QAQ
有什么额外要求吗
学习编程中的Ben
发表于 2023-7-25 13:45:43
歌者文明清理员 发表于 2023-7-25 13:34
有什么额外要求吗
有,我要贡献