鱼C论坛

 找回密码
 立即注册
查看: 1393|回复: 3

[已解决]pygame的position移动问题

[复制链接]
发表于 2023-9-1 16:32:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import sys
import pygame
import os
os.chdir("C:\\Users\\david\\Desktop")
pygame.init()
size = width,height = 600,400
bg = (255,255,255)
speed = [-2,-2]
screen = pygame.display.set_mode(size)
photo = pygame.image.load("uu.gif")
position = photo.get_rect()
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    position = position.move(speed)
    if position.left <0 or position.right > width:
        photo = pygame.transform.flip(photo,True,False)
        speed[0] = -speed[0]
    if position.top < 0 or position.bottom > height:
        speed[1] = -speed[1]
    screen.fill(bg)
    screen.blit(photo,position)
    pygame.display.flip()
    pygame.time.delay(10)
   


import sys
import pygame
import os
os.chdir("C:\\Users\\david\\Desktop")
pygame.init()
size = width,height = 600,400
bg = (255,255,255)
speed = [-2,2]
screen = pygame.display.set_mode(size)
photo = pygame.image.load("uu.gif")
position = photo.get_rect()
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    position = position.move(speed)
    if position.left <0 or position.right > width:
        photo = pygame.transform.flip(photo,True,False)
        speed[0] = -speed[0]
    if position.top < 0 or position.bottom > height:
        speed[1] = -speed[1]
    screen.fill(bg)
    screen.blit(photo,position)
    pygame.display.flip()
    pygame.time.delay(10)
   

为什么两段代码不同,但运动轨迹却相同。
最佳答案
2023-9-1 16:53:09
原因是:第二个程序一开始移动时,物体就撞上了边界,导致运动方向取反
从而导致和第一个程序轨迹一样
position = photo.get_rect() 下面加上如下代码:
position = position.move([100,50]) #改变物体位置,防止一开始移动就撞上边界
就能看出轨迹不同

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2023-9-1 16:32:37 | 显示全部楼层
这两段代码之间的唯一区别是速度(speed)的y分量不同。第一段代码的速度是[-2,-2],第二段代码的速度是[-2,2]。尽管y分量的正负号不同,但它们的绝对值相同,因此在每次循环迭代中,物体的位置(position)将以相同的速度在y轴上移动。

在这两段代码中,物体的位置(position)通过position.move(speed)方法来更新。这个方法会根据速度(speed)的x和y分量来改变物体的位置。在第一段代码中,速度的y分量为-2,意味着物体在y轴上每次循环迭代时向上移动2个像素。而在第二段代码中,速度的y分量为2,意味着物体在y轴上每次循环迭代时向下移动2个像素。

由于两段代码的x分量速度相同,所以物体在x轴上的移动轨迹是相同的。而在y轴上,由于速度的y分量的正负号不同,物体在每次循环迭代时的移动方向相反,但移动的距离是相同的。因此,两段代码的运动轨迹是相同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-1 16:34:49 | 显示全部楼层
移动方向不相同,但轨迹为什么相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-9-1 16:53:09 | 显示全部楼层    本楼为最佳答案   
原因是:第二个程序一开始移动时,物体就撞上了边界,导致运动方向取反
从而导致和第一个程序轨迹一样
position = photo.get_rect() 下面加上如下代码:
position = position.move([100,50]) #改变物体位置,防止一开始移动就撞上边界
就能看出轨迹不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 15:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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