SFML中项目符号生成错误
Error with bullets spawn in SFML
我在SFML游戏中生成子弹时遇到了一个小问题。有代码:
#include <SFML/Graphics.hpp>
#include <iostream>
#include <cmath>
int pad_id;
int pociski = 3;
int d_pad_x, d_pad_y;
int klatki;
bool p_1;
bool p_2;
bool p_3;
sf::Texture tekstura, pocisk;
sf::Sprite kulka, pocisk_1, pocisk_2, pocisk_3;
sf::Clock _clock;
float accumulator = 0;
float TIME_STEP = 0.03f;
sf::ContextSettings settings;
sf::RenderWindow window(sf::VideoMode(1920, 1080), "Wrecking balls", sf::Style::Fullscreen, settings);
class bullet
{
public:
sf::Texture bullet_texture;
sf::Sprite _sprite;
void spawn_new_bullet(sf::Vector2f from, sf::Vector2f to);
};
void bullet::spawn_new_bullet(sf::Vector2f from, sf::Vector2f to)
{
bullet_texture.loadFromFile("pocisk.png");
_sprite.setTexture(bullet_texture);
_sprite.setPosition(from);
_sprite.setRotation(atan2(to.y - from.y, to.x - from.x));
window.draw(_sprite);
}
int main()
{
settings.antialiasingLevel = 2;
window.setFramerateLimit(60);
window.setVerticalSyncEnabled(true);
if(!tekstura.loadFromFile("ball.png"))
{
std::cout << "error" << std::endl;
}
if (!pocisk.loadFromFile("pocisk.png"))
{
std::cout << "error" << std::endl;
}
kulka.setTexture(tekstura);
pocisk_1.setTexture(pocisk);
pocisk_2.setTexture(pocisk);
pocisk_3.setTexture(pocisk);
for (int i=0; i<8; i++)
{
if (sf::Joystick::isConnected(i))
{
std::cout << "Pad " << i << " is connected." << std::endl << "Number of buttons: " << sf::Joystick::getButtonCount(i) << std::endl;
pad_id = i;
}
}
kulka.setScale(0.050, 0.050);
pocisk_1.setScale(0.050, 0.050);
pocisk_2.setScale(0.050, 0.050);
pocisk_3.setScale(0.050, 0.050);
while (window.isOpen())
{
accumulator += _clock.restart().asSeconds();
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
}
if (event.type == sf::Event::JoystickButtonPressed)
{
if (sf::Joystick::isButtonPressed(0, 0))
{
std::cout << "0" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 1))
{
std::cout << "1" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 2))
{
std::cout << "2" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 3))
{
std::cout << "3" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 4))
{
std::cout << "4" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 5))
{
std::cout << "5" << std::endl;
if (pociski > 0)
{
if (pociski == 3)
{
p_3 = true;
}
if (pociski == 2)
{
p_2 = true;
}
if (pociski == 1)
{
p_1 = true;
}
pociski -= 1;
}
}
if (sf::Joystick::isButtonPressed(0, 6))
{
std::cout << "6" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 7))
{
std::cout << "7" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 8))
{
std::cout << "8" << std::endl;
}
if (sf::Joystick::isButtonPressed(0, 9))
{
std::cout << "9" << std::endl;
}
}
}
if(accumulator > TIME_STEP)
{
window.clear();
if (pociski < 3)
{
klatki += 1;
}
d_pad_x = sf::Joystick::getAxisPosition(pad_id, sf::Joystick::X);
d_pad_y = sf::Joystick::getAxisPosition(pad_id, sf::Joystick::Y);
kulka.move(d_pad_x / 5, d_pad_y / 5);
pocisk_1.setPosition(kulka.getPosition().x + 10, kulka.getPosition().y + 13.75);
pocisk_2.setPosition(kulka.getPosition().x + 20, kulka.getPosition().y + 13.75);
pocisk_3.setPosition(kulka.getPosition().x + 30, kulka.getPosition().y + 13.75);
//std::cout << d_pad_x << d_pad_y << std::endl;
window.draw(kulka);
if (pociski == 1)
{
window.draw(pocisk_1);
}
else if (pociski == 2)
{
window.draw(pocisk_1);
window.draw(pocisk_2);
}
else if (pociski == 3)
{
window.draw(pocisk_1);
window.draw(pocisk_2);
window.draw(pocisk_3);
}
if (p_3 == true)
{
bullet::spawn_new_bullet(kulka.getPosition(), sf::Vector2(100, 100));
p_3 = false;
}
if (p_2 == true)
{
bullet::spawn_new_bullet(kulka.getPosition(), sf::Vector2(100, 100));
p_2 = false;
}
if (p_1 == true)
{
bullet::spawn_new_bullet(kulka.getPosition(), sf::Vector2(100, 100));
p_1 = false;
}
accumulator -= TIME_STEP;
window.display();
}
if (klatki >= 166)
{
if (pociski < 3)
{
pociski += 1;
klatki = 0;
}
}
}
return 0;
}
我在第162行中得到的错误是:"在'('标记之前缺少模板参数"。有人能告诉我应该怎么做吗?为什么这个方法必须与模板一起使用?
Vector2是一种模板类型。要么提供模板参数,要么使用提供的typedef之一,如sf::Vector2i–Neil Kirckquote
为函数spawn_new_bullet
提供正确的第二个参数,例如Vector2f()
。
干杯
相关文章:
- 在C++中使用内联方法时出现未定义的符号错误
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 体系结构x86_64的未定义符号:链接器错误
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 链接错误:符号重复
- 架构X86_64静态类成员的错误符号X86_64错误
- 缓冲区中使用 GetWindowText 的错误符号
- OSX:ld:警告:错误符号操作:适用于核心库
- 为什么 Folly 的共享库引用了 Boost 中的错误符号?(OS X 上的 GCC)
- 嵌入lua运行时错误:符号未找到:_luaL_newstate
- C++ 找不到"::"架构的苹果马赫-O链接器错误/符号