gpt4 book ai didi

python-3.x - 为什么不转一圈?以及如何修复它?

转载 作者:行者123 更新时间:2023-12-04 09:30:08 26 4
gpt4 key购买 nike

我不确定正在创建的形状的名称是什么,但我认为是圆形和方形的组合,或者可能类似于圆柱体。您可以运行代码以查看它的形状。你能推荐一个我可以学习编写游戏代码的网站吗(基本游戏背后的算法)?我希望你明白我的意思,因为我不擅长英语。

import pygame
import sys
import math

pygame.init()

width = 640
height = 480
screen = pygame.display.set_mode((width,height))

img = pygame.Surface((50,50))
img.set_colorkey((255,0,0))

angle = 0
clock = pygame.time.Clock()

c_list = []

x = 100
y = 100

vel = 5

def draw_line(surface, color, pos1, pos2):
pygame.draw.line(surface, color, pos1, pos2)

while True:
screen.fill((122,122,122))
keys = pygame.key.get_pressed()
angle -= 3
if angle % 360 < 90:
x -= math.sin(angle/180*math.pi)**2*vel
y -= math.cos(angle/180*math.pi)**2*vel
elif angle % 360 < 180:
x -= math.sin(angle/180*math.pi)**2*vel
y += math.cos(angle/180*math.pi)**2*vel
elif angle % 360 < 270:
x += math.sin(angle/180*math.pi)**2*vel
y += math.cos(angle/180*math.pi)**2*vel
else:
x += math.sin(angle/180*math.pi)**2*vel
y -= math.cos(angle/180*math.pi)**2*vel

if (x,y) not in c_list:
c_list.append((x,y))
for i in range(len(c_list)-1):
draw_line(screen,(0,0,0),c_list[i],c_list[i+1])
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(-1)

img_copy = pygame.transform.rotate(img, angle)
screen.blit(img_copy,(x-int(img_copy.get_width()/2),y-int(img_copy.get_width()/2)))

pygame.display.flip()

最佳答案

你必须找到圆的切线。如果您有 angle那么到圆上点的向量是:

vx, vy = cos(angle), sin(angle)
圆的切线是旋转 90° 的向量:
tx, ty = -vy, vy
将每帧中点 (x, y) 的切线乘以速度相加:
x -= math.sin(angle*math.pi/180)*vel
y += math.cos(angle*math.pi/180)*vel
angle += 3
另见 Move and rotate .

最小的例子:

import pygame
import sys
import math

pygame.init()
width = 640
height = 480
screen = pygame.display.set_mode((width,height))
clock = pygame.time.Clock()

img = pygame.Surface((50,50))
img.set_colorkey((255,0,0))
angle = 0
c_list = []
x, y = 300, 200
vel = 5

def draw_line(surface, color, pos1, pos2):
pygame.draw.line(surface, color, pos1, pos2)

start = False
while True:
screen.fill((122,122,122))
keys = pygame.key.get_pressed()

x -= math.sin(angle*math.pi/180)*vel
y += math.cos(angle*math.pi/180)*vel
angle += 3

if (x,y) not in c_list:
c_list.append((x,y))
for i in range(len(c_list)-1):
draw_line(screen,(0,0,0),c_list[i],c_list[i+1])
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(-1)

img_copy = pygame.transform.rotate(img, -angle)
screen.blit(img_copy,(x-int(img_copy.get_width()/2),y-int(img_copy.get_width()/2)))
pygame.display.flip()

关于python-3.x - 为什么不转一圈?以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62883103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com