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
相似问题