转换忽略 sf::Sprite 的起源

2023-12-23

在 SFML 中变换精灵,不考虑它的新原点。

在我的例子中,sf::Sprite 围绕左上角 ({0,0}) 的轴旋转,无论其原点如何。之前使用 .setOrigin() 设置新的原点无效。

我确信精灵会更早地获得正确的原点位置,即矩形的中心。

My code:

在每个 Card 类构造函数中,我设置了精灵的原点。

card_sprite.setOrigin(Card::get_default_single_card_size().x*Game::get_scale()/2,Card::get_default_single_card_size().y*Game::get_scale()/2);

然后在我的 Deck 类中,其行为类似于 std::stack of Cards 我使用函数:

void Deck::push(const Card& crd)
{
    push_back(crd);
    ..//
    std::default_random_engine generator;
    std::uniform_real_distribution<float> distributor(0,360);
    top().setRotation(distributor(generator));
}

Card::setRotaion() 看起来像这样,(它仍然围绕左上角旋转卡片):

void Card::setRotation(float angle)
{
    card_sprite.setRotation(angle);
}

感谢您提前的帮助


Edit:实际上大多数方法sf::Transform接受额外的参数来指定转换的中心,按照https://stackoverflow.com/users/7703024/super https://stackoverflow.com/users/7703024/super对我关于同一主题的问题的评论:如何在 sfml 中“设置变换的原点” https://stackoverflow.com/questions/65620996/how-to-set-the-origin-of-a-transform-in-sfml

我不太确定你的代码,但我可能遇到了类似的问题。
我通过在使用时将对 sfml 绘图函数的每次调用替换为对自定义函数的调用来“解决”它(以一种非常不理想的方式)sf::Transforms.

例如:而不是做类似的事情:

window.draw(thing, my_transform); 

我必须做 :

draw_transformed(thing, my_transform, window)

代码在哪里draw_transformed看起来像这样:

void draw_transformed (sf::Shape const& thing, sf::Transform const& t, sf::RenderWindow& window) // cf note (1)
{
  sf::Vector2f pos = thing.getPosition();
  sf::Transform go_to_zero;
  go_to_zero.translate(-pos);
  sf::Transform go_back;
  go_back.translate(pos);
  sf::Transform conjugated_transform = go_back * t * go_to_zero ;
  window.draw(thing, conjugated_transform);
  
}

(1)我们不能使用sf::Drawable作为类型thing因为在 sfml 中并非所有可绘制的东西都有getPosition方法,所以我们必须重载该函数或做一些“复杂”的事情来超越这个例子。

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

转换忽略 sf::Sprite 的起源 的相关文章

随机推荐

  • RavenDb:更新非规范化参考属性值

    我已经实现了RavenDB非规范化参考 http ravendb net docs faq denormalized updates图案 我正在努力将静态索引和补丁更新请求连接在一起 以确保在引用的实例值更改时更新我的 非规范化引用属性值
  • 什么是内存碎片?

    我听说过在 C 动态内存分配上下文中多次使用过 内存碎片 这个术语 我发现了一些关于如何处理内存碎片的问题 但找不到处理它本身的直接问题 所以 什么是内存碎片 如何判断内存碎片是否是我的应用程序的问题 什么样的程序最有可能受到影响 处理内存
  • DomPDF 不能很好地渲染表格

    我正在尝试使用 DomPDF 获取 PDF 但遇到了一个奇怪的问题 所有数据和其他内容都很好 但当以 PDF 形式呈现时 表格的第一行总是过时 首先 我虽然表格可能会转到下一页 这会导致样式脱离上下文 但我尝试将表格限制为一页 发现问题仍然
  • 什么是好的 php 解析器生成器?

    我需要解析一种小的 迷你语言 用户可以在我的网站上输入它 我想知道 lex 和 jacc 或 antlr 在 php 世界中的对应部分是什么 I used PHP 的 LIME 解析器生成器 http sourceforge net pro
  • 将 Picasso 库与 ListView 一起使用

    我想做的是调整我的自定义 ListView 适配器以使用 Picasso 库从网络获取的图像 我相信我已经更改了适配器以便接受来自 Picasso 的图像 但我不确定如何更改我的实现以使用 ListView 接受它 我相信我必须访问hold
  • 如何通过扩展修改 Chrome 中的当前 url 位置

    我想创建一个扩展 如果用户单击扩展按钮 则将用户重定向到另一个网站 到目前为止 我只看到了为每次点击创建一个新选项卡的扩展 是否可以使用活动选项卡将用户重定向到另一个网站 我尝试过这样的事情 chrome browserAction onC
  • 简单的汇编代码会导致段错误吗?

    section data section text globl start start movl 1 eax this is the linux kernel command number system call for exiting a
  • C++0x 中的本地化支持有任何更新吗?

    我对 C 语言环境方面的研究越多 我就越了解 它们已经被破坏了 std time get 不对称std time put 如 C strftime strptime 中所示 并且不允许轻松解析带有 AM PM 标记的时间 I 发现 http
  • 在 C# 中按第一个元素的升序对二维数组行进行排序

    我需要按第一个元素的升序对二维数组行进行排序 如示例所示 5 7 6 2 9 6 4 8 1 gt 2 9 6 4 8 1 5 7 6 我可以在行中找到最大元素 但我现在不知道如何对行进行排序 public double maxInRow
  • PHP:get_used_class() 与 get_class($this)

    在 PHP 中 有什么区别get called class http php net manual en function get called class php and get class this http php net manua
  • SQLite 按小时、天、周、年进行分组/计数

    假设我们有一个简单的 Android 应用程序 只有一个按钮 单击该按钮记录该单击的日期和时间 在 sqlite 中 我想知道记录保存该日期时间的长串或字符串的最佳格式是什么 目的是制作报告来显示 1 选定日期的点击次数总和 按小时分组 2
  • 配置在 Eclipse 中为 Scala 运行

    我是 Scala 的初学者 我在 eclipse 中安装了 Scala IDE 现在我想运行我的应用程序 它从不显示 作为 Scala 应用程序运行 而是显示 作为 Java 应用程序运行 或 Java 小程序 我打开 运行配置 并单击 S
  • 使用 SSL/Keystore 连接到 Java 中的 Websphere MQ

    我想通过 Java 连接到 Websphere 6 0 MQ 我已经有了 普通 队列的工作代码 但现在我需要访问一个经过 SSL 加密 密钥库 的新队列 我收到了一个名为 Something jks 的文件 我认为它是我需要存储在某处的证书
  • html5中的
    标签可以用作背景图片吗?

    我开始阅读 html5 并且正在尝试开展一个项目 以便我可以了解事情是如何工作的 我知道标签可以这样使用
  • zsh:找不到命令:express

    我安装了node和npm并且都工作正常 但是 当我尝试通过安装 Express 时npm install g express I get zsh 找不到命令 express 我尝试在我的中添加各种路径 zshrc文件没有运气 如果我回声 p
  • 更改使用 catplot 或 barplot 创建的条形图的宽度

    我正在尝试使用seaborn factorplot 创建条形图 我的代码如下所示 import seaborn as sns import matplotlib pyplot as plt df pd read csv data csv f
  • 如何在 Dotrine 2 中配置命名策略

    我读了chapter http docs doctrine project org projects doctrine orm en latest reference namingstrategy html关于手册中的 Doctrine 命
  • Tkinter - 等重的列不等宽

    我有一个包含三列的 Tkinter 顶级窗口 所有三列均配置为具有相同的权重 内柱0 and 2是子框架 里面有Listbox小部件 内柱1是一组按钮 由于某种原因 尽管我的 3 列具有相同的权重 但这些列表框 强制 它们的列占用更多空间
  • mypy:“__eq__”与超类型“object”不兼容

    这是我的代码 class Person def init self id self id id def eq self other Person gt bool return self id other id def compare sel
  • 转换忽略 sf::Sprite 的起源

    在 SFML 中变换精灵 不考虑它的新原点 在我的例子中 sf Sprite 围绕左上角 0 0 的轴旋转 无论其原点如何 之前使用 setOrigin 设置新的原点无效 我确信精灵会更早地获得正确的原点位置 即矩形的中心 My code