1
我使用VS終極2012年,並試圖做一個類,但所有變量和函數有一個參數不斷返回「標識符未找到」。標識符沒有在參數變量和函數中找到
函數update(),run()等工作得很好。
我嘗試在.cpp文件中定義例如mIsMovingUp(false)和Game :: mIsMovingUp,但都無法工作,而且我真的被困在這裏。
錯誤:
game.cpp(24): error C2039: 'handlePlayerInput' : is not a member of 'Game'
game.h(7) : see declaration of 'Game'
game.cpp(27): error C2065: 'mIsMovingUp' : undeclared identifier
game.cpp(29): error C2065: 'mIsMovingDown' : undeclared identifier
game.cpp(31): error C2065: 'mIsMovingLeft' : undeclared identifier
game.cpp(33): error C2065: 'IsMovingRight' : undeclared identifier
game.cpp(62): error C2065: 'mIsMovingUp' : undeclared identifier
game.cpp(64): error C2065: 'mIsMovingDown' : undeclared identifier
game.cpp(66): error C2065: 'mIsMovingLeft' : undeclared identifier
game.cpp(68): error C2065: 'mIsMovingRight' : undeclared identifier
代碼:
//game.h
#ifndef GAME_H
#define GAME_H
#include <SFML/Graphics.hpp>
class Game
{
public:
Game();
void run();
private:
void processEvents();
void handlePlayerInput(sf::Keyboard::Key key, bool isPressed);
void update();
void render();
private:
sf::RenderWindow mWindow;
sf::CircleShape mPlayer;
bool mIsMovingUp;
bool mIsMovingDown;
bool mIsMovingRight;
bool mIsMovingLeft;
};
#endif
。
//game.cpp
#include "..\Headers\game.h"
Game::Game()
: mWindow(sf::VideoMode(640, 480), "Beginning")
, mPlayer()
{
mPlayer.setRadius(40.f);
mPlayer.setPosition(100.f, 100.f);
mPlayer.setFillColor(sf::Color::Cyan);
}
void Game::run()
{
while (mWindow.isOpen())
{
processEvents();
update();
render();
}
}
void Game::handlePlayerInput(sf::Keyboard::Key key, bool isPressed) //error
{
if (key == sf::Keyboard::W)
mIsMovingUp = isPressed; //error
else if (key == sf::Keyboard::S)
mIsMovingDown = isPressed; //error
else if (key == sf::Keyboard::A)
mIsMovingLeft = isPressed; //error
else if (key == sf::Keyboard::D)
IsMovingRight = isPressed; //error
}
void Game::processEvents()
{
sf::Event event;
while (mWindow.pollEvent(event))
{
switch (event.type)
{
case sf::Event::KeyPressed:
handlePlayerInput(event.key.code, true);
break;
case sf::Event::KeyReleased:
handlePlayerInput(event.key.code, false);
break;
case sf::Event::Closed:
mWindow.close();
break;
}
}
}
void Game::update()
{
sf::Vector2f movement(0.f, 0.f);
if (mIsMovingUp) //error
movement.y -= 1.f;
if (mIsMovingDown) //error
movement.y += 1.f;
if (mIsMovingLeft) //error
movement.x -= 1.f;
if (mIsMovingRight) //error
movement.x += 1.f;
mPlayer.move(movement);
}
void Game::render()
{
mWindow.clear();
mWindow.draw(mPlayer);
mWindow.display();
}
。
//main.cpp
#include "game.h"
int main()
{
Game game;
game.run();
}
我認爲你需要包括'SFML/Window.hpp'在'game.h'到能夠使用'sf :: Keyboard'。 – emlai 2015-03-02 23:51:30
不是這樣,它不能解釋變量。 https://github.com/LaurentGomila/SFML-Game-Development-Book/blob/master/01_Intro/Include/Book/Game.hpp此代碼的原作者未包含鍵盤或窗口 – 2015-03-02 23:58:23
一個錯誤是「IsMovingRight = isPressed;'缺少前面的'm'。這不是很有幫助。 – TriHard8 2015-03-02 23:59:02