- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 SFML 在 C++ 中编写一个小程序,锻炼自己并越来越熟悉 Sprites、纹理、文本和其他东西。
问题是,当我点击 1 个文本(订单)时,它会弹出新窗口,其中有 4 行:
按剩余 Xps 排序
按当前 Xps 排序
按当前排名排序
返回
我的问题是,虽然按当前 Xps 排序可以正常显示所有 Sprite ,但按剩余 Xps 排序和按当前等级排序显示的图标尺寸错误。
(我注意到 Total Level
图标和列表的第一个图标的大小总是错误的)
图像:
http://i60.tinypic.com/2n84wmc.png
按正确图片排序的列表
http://i58.tinypic.com/2agsp5f.png
如您所见,第一个图标和 Total Level
旁边的图标大小错误。
列表本身已正确排序。
代码很糟糕,但这里是操纵 Sprite 和/或纹理的部分:
缩放函数:
void scaleSprite(int pixelsX, int pixelsY, sf::Sprite& sprite)
{
auto tex = sprite.getTexture();
if (!tex) return;
auto texSize = tex->getSize();
auto newTexSize = sf::Vector2u(pixelsX, pixelsY);
auto scaleX = newTexSize.x*1.00f/texSize.x;
auto scaleY = newTexSize.y*1.00f/texSize.y;
sprite.scale(scaleX, scaleY);
}
渲染窗口的代码(所有不对 Sprite 和纹理做任何事情的代码都被省略了,从加载开始,但加载的纹理都是正确的)
void showWindowOrdered(std::vector<SkillData>& vec, showOption option, sf::RenderWindow& parent, sf::VideoMode vMode,\
const std::string& name, sf::Uint8 mode)
{
sf::Font font;
font.loadFromFile("fonts/runescape_chat_font.ttf");
std::vector<sf::Texture> texVec;
for(int i = 0; i < 27; ++i)
{
//load the textures
}
enFile.close();
std::vector<sf::Sprite> sprVec;
std::vector<sf::Text> textVec;
for(int i = 0; i < texVec.size(); ++i)
{
sf::Sprite spr;
spr.setTexture(texVec[i]);
scaleSprite(28, 28, spr);
spr.setPosition(1, i*28 + 1);
sprVec.push_back(spr);
sf::Text text;
text.setFont(font);
text.setColor(sf::Color::Yellow);
text.setPosition(35, (i)*(28) + 1);
text.setCharacterSize(25);
textVec.push_back(text);
}
std::vector<sf::Text> textValVec;
for(int i = 0; i < textVec.size(); ++i)
{
//...
}
//...
if (option == showOption::sortXps)
{
//sort for showOption::sortXps
}
else if (option == showOption::sortRank)
{
//sort for showOption::sortRank
}
else
{
//sort for showOption::sortXpsRemaining
}
for(int i = 0; i < sorted.size(); ++i)
{
auto texIndex = findIndexNames(sorted[i].name);
sprVec[i].setTexture(texVec[texIndex]);
sprVec[i].setPosition(1, (i)*28 + 1);
}
//...
sf::RenderWindow window(sf::VideoMode(offset+5, 800), "Sorted by" + s, sf::Style::Close | sf::Style::Titlebar);
while(window.isOpen())
{
auto pos = sf::Mouse::getPosition(window);
sf::Event e;
while(window.pollEvent(e))
{
//...
}
auto bgColor = sf::Color(4, 18, 27);
window.clear(bgColor);
for(auto&& a : textVec)
window.draw(a);
for(auto&& a : textValVec)
{
window.draw(a);
}
for(auto&& a : sprVec)
window.draw(a);
window.draw(goBack);
window.display();
}
}
可能是什么问题?
for(int i = 0; i < sorted.size(); ++i)
{
auto texIndex = findIndexNames(sorted[i].name);
sprVec[i].setTexture(texVec[texIndex]);
sprVec[i].setPosition(1, (i)*28 + 1);
}
但如果没有它,我实际上无法对 Sprite 的位置进行排序,除非手动移动所有 Sprite ,但列表不是确定性的
此外,我在此之前重新加载纹理,重新缩放 Sprite ,它创建相同的东西甚至更糟(第一个 Sprite 和 Total Level
旁边的 Sprite 更奇怪)
谢谢你的帮助
最佳答案
关于C++ SFML Sprite 大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21817316/
我有一个包含纹理的文件。我加载到 sf::Texture并用 setTextureRect 拆分成 Sprite . 现在假设一个 Sprite 包含 20 像素宽的纹理的一部分。如何渲染它以适应例如
一段时间以来,我一直在使用 SDL 来制作小东西的原型(prototype)并了解有关图形编程的更多信息。 然后我看到了SFML并想试一试,发现它更面向对象并修复了我认为 SDL 存在的一些问题。 但
我正在使用 rust-sfml ( rsfml::graphics ) 目前,将像素绘制到屏幕上。 (我只是从 Rust 和项目开始。)我将数据存储在 Image 中。 , 然后复制到 Texture
我试图在 SFML 2 中获取关键输入,在 SFML 1.6 im 中使用 while (App.GetEvent(Event)) { if (App.GetI
我做了一个非常简单的双人游戏,一个是水母,另一个是SFML中的鲨鱼。唯一的问题是一次只能有一个 Sprite 移动。这可能修复吗?我该如何修复? 编辑:我的尝试是这样的: if (event.type
我已经尝试了几个小时,但似乎无法做到我已经下载了扩展程序并寻求帮助,但此时一切都让我感到困惑。 我想在我的项目中包含 SFML 库,我正在尝试使用 Visual Studio Code 编辑器,但由于
下面链接中的图片包含 20 多张图片(每个 body 部位和盔甲类型都在单独的文件中)。这个角色在名为“Spriter”的软件中被动画化。该代码采用 spriter 的输出文件 (.scml),然后计
我的第一个问题是 C++ 是否: pTexture.getSize().x 等于 C#(因为这对我来说没有结果): pTexture.Size().X 第二个问题是关于C++代码的(如何在SFML.n
我正在尝试在 Windows 10 下用 sfml 构建游戏。它在构建时显示成功。每当我调试解决方案时,它都会显示如下错误消息: Unhandled exception at 0x00007FFA62
我开始使用 SFML 和 C++ 创建游戏。但是,我遇到了一个问题。我有基本的骨架类代码,但由于某种原因,当我创建一个窗口(sf::Window)时,我立即崩溃了!此代码不包含任何事件检查代码,但它包
我的项目中有 2 个 CMakeLists.txt 文件。 CMakeLists.txt cmake_minimum_required(VERSION 3.2) project(Game) set(C
所以我正在尝试编写一些与网络相关的代码,特别是使用 SFML 的端口扫描器。我正在运行 VS 2017 并下载了 2015 年的 SFML 版本,但是人们说这应该适用于 2017 年。 到目前为止,我
我刚刚开始使用 C++ 和 SFML,最终一切都运行良好。在出现 undefined reference 错误之前,我意识到我一直在下载错误类型的 SFML,得到的是 SJLJ 而不是 DW2。问题已
尝试将新的 C++ 项目与 SFML 链接,我执行了以下操作: 创建了一个空项目。 C/C++ >> 常规:附加包含目录:添加了 SFML 包含目录并从项目默认值继承。 链接器 >> 附加库目录:添加
当我运行代码时,除了不播放声音外,一切正常。链接很好,当我放置断点并查看声音对象时,它显示 .我在正确的位置添加了 sfml-audio-d.lib 和 sfml-audio.lib。欢迎提出任何建议
下面的代码给出了未捕获的异常(特别是 txtr.loadFromFile("C:/Users/kidz/Documents/Visual Studio 2012/Projects/SFML/Debug
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
我想知道是否可以使用 SFML 库在 C 中使用颜色设置碰撞?因为我使用的是带有图 block 的 map ,我不知道它是否可以一起工作。 谢谢! 最佳答案 据我所知,您使用具有两种颜色的图像来定义碰
我正在制作 Frogger 的 C++ SFML 版本,目前正在尝试实现 Frog 和其他物体(汽车、卡车、原木等)之间的碰撞检测。我为 Frog 和游戏对象有单独的类,并希望使用边界框来检测交叉点,
嗨,大家好 为了缩放我的 sfml 应用程序,我正在尝试解决这个问题,该程序最初使用 运行(640, 480) 方面 显示这样的窗口... 我的目标是以全屏模式执行程序并放置旧的 '窗口' (检查图像
我是一名优秀的程序员,十分优秀!