2015-11-07 25 views
0

我在我的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得到的错误是:?“失踪之前模板参数‘(’令牌”谁能告诉我,我应该怎么做,为什么这个方法必须与使用?模板

+2

避免全局变量。使用有意义的名字“p_1”是什么意思?请在导致错误的代码中清楚地指明该行。 –

+0

p_1,p_2,p_3是变量,帮助我在window.clear在主游戏循环中调用后运行“bullet :: spawn_new_bullet” – 3Qax

+0

我在此行中出现错误:'bullet :: spawn_new_bullet(kulka.getPosition(),sf :: Vector2(100,100));' – 3Qax

回答

0

Vector2是一个模板类型要么提供模板参数,或使用提供的typedef如SF :: Vector2i之一 - 尼尔Kirkckquote

给正确的第二个参数的函数spawn_new_bullet,例如Vector2f()

欢呼!