首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在pygame中想运行一个行星环绕,最后出现了这个问题,求大神帮帮忙???

在pygame中想运行一个行星环绕,最后出现了这个问题,求大神帮帮忙???

提问于 2022-07-29 17:37:50
回答 0关注 0查看 30
代码语言:javascript
复制
import sys,math,pygame
from pygame.locals import *

class Point(object):
    def __init__(self,x,y):
        self._x=x
        self._y=y
def getx(self):
    return self._x
def setx(self):
    self._x=x
x=property(getx,setx)


def gety(self):
    return  self._y
def sety(self):
    self._y=y
y=property(gety,sety)

    
def __str__(self):
    return  "{X:"+"{:.0f}".format(self._x)+\
            ",Y:"+"{:.0f}".format(self._y)+ "}"
def print_text(font,x,y,text,color=(255,255,255)):
    imgText=font.render(text,True,color)
    screen.blit(imgText,(x,y))

def wrap_angle(angle):
    return angle % 360

pygame.init()
screen=pygame.display.set_mode((800,600))
pygame.display.set_caption("Orbit Demo")
font=pygame.font.Font(None,18)

space=pygame.image.load(r"C:\Users\Zengfeng\Desktop\银河.PNG").convert_alpha()
planet = pygame.image.load(r"C:\Users\Zengfeng\Desktop\行星.PNG").convert_alpha()
ship=pygame.image.load(r"C:\Users\Zengfeng\Desktop\超人.PNG").convert_alpha()

width, heigth = ship.get_size()
ship = pygame.transform.smoothscale(ship,(width//2,heigth//2))

redius=250
angle=0.0
pos=Point(0,0)
old_pos=Point(0,0)


while True:
    for event in pygame.event.get():
        if event.type== QUIT:
            sys.exit()
    keys=pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        sys.exit()
    screen.blit(space, (0, 0))

    width, heigth = planet.get_size()
    screen.blit(planet, (400 - width / 2, 300 - heigth / 2))

    angle=wrap_angle(angle-0.1)
    pos.x=math.sin(math.radians(angle)) * redius
    pos.y = math.cos(math.radians(angle)) * redius

    delta_x=(pos.x-old_pos.x)      #这个地方报错
    delta_y=(pos.y-old_pos.y)      #这个地方报错
    rangle=math.atan2(delta_y,delta_x)
    rangled=wrap_angle(-math.degrees(rangle))
    scratch_ship=pygame.transform.rotate(ship,rangled)

    width,heigth= scratch_ship.get_size()
    x=400+pos.x-width//2
    y=300+pos.y-heigth//2
    screen.blit(scratch_ship,(x,y))

    print_text(font,0,0,"Orbit:" + "{:.0f}".format(angle))
    print_text(font, 0, 20, "Rotation:" + "{:.2f}".format(angle))
    print_text(font, 0, 40, "Position:" + str(pos))
    print_text(font, 0, 60, "Old Pos:" + str(old_pos) )
    # screen.blit(ship, (50, 50))

    pygame.display.update()
    old_pos.x = pos.x
    old_pos.y = pos.y

下面的y也是这样报错
下面的y也是这样报错

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档