为什么它不转一圈?以及如何修复它?

2023-12-01

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

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

也可以看看移动和旋转.


最小的例子:

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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么它不转一圈?以及如何修复它? 的相关文章

  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • PyMC3-自定义 theano Op 进行数值积分

    我使用 PyMC3 进行参数估计 使用必须定义的特定似然函数 我用谷歌搜索了一下 发现我应该使用densitydist实现用户定义的似然函数的方法 但它不起作用 如何在 PyMC3 中合并用户定义的似然函数并找出最大 aposteriori
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • 致命错误:Python.h:没有这样的文件或目录,python-Levenshtein 安装

    首先 我正在使用 Python 3 7 开发 Amazon EC2 实例 Amazon linux 版本 2 AMI 我正在尝试使用以下命令安装 python Levenshtein 包 pip3 install python Levens
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • 如何用pygame画一条虚线?

    我需要在坐标系上绘制正弦波和余弦波 就像在this https i stack imgur com DGI8g png图片 除了没能代表以外 我所有的工作都做得很好虚线和曲线与 pygame 一致 我有与我需要的类似的东西 但我怎样才能让它
  • 配置 Django 和 Google 云存储?

    I am not使用应用引擎 我有一个在虚拟机上运行的普通 Django 应用程序 我想使用 Google Cloud Storage 来提供静态文件 以及上传 提供媒体文件 我有一个水桶 如何将 Django 应用程序链接到我的存储桶 我
  • 将文件拆分为块

    我正在尝试分割格式为以下的文件 some garbage lines target G0 S0 type xy 0 108847E 02 0 489034E 04 0 108711E 02 0 491023E 04 0 108574E 02
  • Python - 如何实现“可停止”线程?

    已经发布解决方案了here https stackoverflow com questions 323972 is there any way to kill a thread in python创建一个可停止的线程 但是 我在理解如何实施
  • Huggingface 变形金刚模块未被 anaconda 识别

    我正在使用 Anaconda python 3 7 Windows 10 我尝试通过安装变压器https huggingface co transformers https huggingface co transformers 在我的环境
  • 如何将嵌套的Python字典转换为简单的命名空间?

    假设我有一个深度为 N 的嵌套字典 如何将每个内部嵌套字典转换为简单的命名空间 example input key0a test key0b key1a key2a keyNx key2b test key1b test example o
  • 如何从 Python 3.5 降级到 3.4

    我想安装 kivy 链接在这里 https kivy org docs installation installation windows html install win dist 用于项目 但是 当尝试使用 pip 安装它所依赖的包时
  • 让 Bazel 使用 Python3 运行(语法错误)

    我正在尝试使用 Bazel 运行此代码 https github com google in silico labeling https github com google in silico labeling 这是关联的 Bazel BU
  • 尽管获得了许可,Discord 机器人仍无法提及所有人

    这是发送消息函数 async def sendMessage color title value should delete True channel embed discord Embed color color embed add fi
  • 如何创建始终有效的导入?

    我正在努力在我的一个项目中建立一个工作结构 问题是 我有一个像这样的结构的主包和子包 我遗漏了所有不必要的文件 code py mypackage init py mypackage work py mypackage utils py u
  • 使用 selenium 进行身份验证 (Python)

    我有指向我网站管理区域的链接 是否可以使用 selenium 在给定的浏览器中 启动这些 URI 链接 而无需事先进行身份验证 如果没有 那么我如何使用 selenium 处理身份验证 不确定您的意思 但您可以仅使用选择器并在身份验证字段中
  • 使用 Python 客户端库进行 gcp 计算 API 传递凭证的内容和方式

    我想使用 python google client api 获取项目中所有实例的列表google api python client 1 7 11我正在尝试使用方法连接googleapiclient discovery build此方法需要
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 使用 python 将文本发送到带有逗号分隔符的列

    如何使用分隔符 在 Excel 中将一列分成两列 并使用 python 命名标题 这是我的代码 import openpyxl w openpyxl load workbook DDdata xlsx active w active a a
  • 在 Tkinter 中使用锚点

    我正在尝试对自动点唱机进行编程 但是我还处于早期阶段 并且在使用时遇到了问题anchor 这是我的代码 from tkinter import from tkinter import messagebox as box def main m

随机推荐

  • 具有多个模板的 ASP Repeater 控件

    如何拥有具有多个模板的转发器控件 其中选择的模板基于项目的类型 这就是我目前所拥有的 我的复读班 ToolboxData lt 0 LifestreamRepeater runat server gt public class Lifest
  • 变异观察者产生无限循环

    我正在使用 jQuery 的突变观察器编写一个函数来注册对 DOM 的更改 特别是在添加新节点时 以便我可以更改其内容 SELeCTOR GOOD click function var targetNode this find conten
  • 表达 sendfile 和重定向 url

    我有一堆中间件 一开始app use我测试该过程是否受到胁迫 如果是 我希望它只发送静态 index html文件并将用户的浏览器重定向到 req url 例如 app set port PORT etc app use function
  • 设置 R_LIBS 并避免“您想使用个人库吗?”

    我的个人库在 Renviron中设置为R LIBS R lib 当我从 rstudio 安装软件包时 这非常有效 当我尝试从普通 R 控制台会话安装新软件包时 它总是询问我 Would you like to use a personal
  • 可以使用缓冲读取来计算 MD5(或其他)哈希值吗?

    我需要计算相当大的文件 千兆字节 的校验和 这可以使用以下方法来完成 private byte calcHash string file System Security Cryptography HashAlgorithm ha Syste
  • 向非引用类型添加生命周期约束

    我试图弄清楚如何应用 Rust 生命周期来向 Erlang NIF 模块添加一些编译时强制 NIF 模块是通常用 C 编写的提供扩展的共享库 用 C 语言编写的回调的简化原型如下所示 Handle my nif function Heap
  • 如何在 Zend Framework 2 中获取控制器名称、操作名称

    我在 Zend Framework 2 中有一个默认模块 namespace Application Controller use Zend Mvc Controller AbstractActionController use Zend
  • 任一类型包含不同类型

    原始帖子已编辑为简化示例 我想创建一个组件 该组件将采用一对值 这两个值都基于相同类型 gt value setValue 并且基于它 将运行取决于这些类型的函数 为了充分说明情况 AnimalAndCatTypes ts export i
  • 如何使用 C 从用户空间获取 Linux 中的驱动器标签

    我需要在 Linux 中使用 c c 并且没有 d bus 获取特定设备的标签 问题是我不能只打开设备并读取它的信息 对于 extN 来说 很容易从设备获取标签 因为从 dev xxx 读取需要 root 权限 我认为现在在大多数发行版中都
  • 从 FullCalendar (jQuery) 中删除事件源时出现问题

    就在那时 我正在使用全日历显示来自多个源的事件 一些是本地 JSON feed 另一些来自 Google Calendar 我实现了一项功能 当复选框分别为 true 或 false 时 可以显示 隐藏单个日历 我正在使用这段代码来实现它
  • 如何从Delphi运行命令行?

    如何从我的 Delphi 应用程序运行此命令 C myapppath appfolder gt appname exe stext save txt 我尝试了以下代码 ShellExecute 0 nil cmd exe cd C myap
  • 在 SetWindowPos() 中获取跨线程操作无效

    我试图从与创建表单的线程不同的线程访问表单 最后出现错误 跨线程操作无效 Code public static void MakeTopMost Form form SetWindowPos form Handle HWND TOPMOST
  • 如何使用许多 OR 替代方案来缩短长 XPath 表达式?

    我正在努力让 Selenium 遍历大量替代条件 XPath 寻找满足以下条件的元素 可能匹配 并将其传递给对象elmnt 目前 使用OR操作员 代码很快就会变得非常重复和详尽 尤其是当存在很多可能的变化时 在下面的示例中 唯一的变化是我开
  • WKWebView确实从本地文档文件夹加载资源

    在我的 Swift iOS 应用程序中 我想从远程服务器下载一些动态 HTML 页面 将它们保存在文档目录中 并从文档目录中显示这些页面 我用它来加载页面 var appWebView WKWebView appWebView loadRe
  • Azure 服务主体可以更新自己的密码吗?

    我需要以编程方式使用 Azure 服务主体 1 添加 删除其他服务主体的密码 以及2 为自身添加 删除密码 1很容易做到 但由于以下错误 我似乎无法执行 2 2可能吗 如何 graphrbac PasswordCredentialsUpda
  • po [NSThread 当前线程]

    当我执行 po NSThread currentThread 时 我得到了 名称 空 数字 4 When I look to the left I see 看起来线程号是 6 而不是 4 另外 我们需要调用哪些属性来获取线程号 NSThre
  • 当方向改变时如何管理应用程序?

    我有一个正在更改屏幕方向的应用程序 但是 当我更改第一个屏幕的方向并转到下一个屏幕时 更改不会持续 附上图片以便更清楚地理解 主要问题是 当设备旋转时 第一个屏幕会旋转 但第二个屏幕不会以新方向启动 仅当我们在屏幕启动后改变方向时它才会旋转
  • 如何在 Python 类中创建增量 ID

    我想为我创建的每个对象创建一个唯一的 ID 这是该类 class resource cl def init self Name Position Type Active self Name Name self Position Positi
  • 全局静态初始化线程

    我有一个用互斥体保护的集合 初始化后 它只能被读取 所以我在那里不需要互斥体 该集合在全局静态初始值设定项中进行初始化和填充 我知道全局静态初始化是在单个翻译单元内保证的 是否可以保证全局静态初始化是单线程的 我有一个受 Schwarz 计
  • 为什么它不转一圈?以及如何修复它?

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