环境搭建好了,接下来就开始正式编码了!!!
首先在stdafx.h里面添加需要用到的文件,以后需要的时候只要include stdafx.h这文件就可以了
1 // stdafx.h : 标准系统包含文件的包含文件,
2 // 或是经常使用但不常更改的
3 // 特定于项目的包含文件
4 //
5
6 #pragma once
7
8 #include "targetver.h"
9
10 #include <stdio.h>
11 #include <tchar.h>
12
13
14
15 // TODO: 在此处引用程序需要的其他头文件
16 #include <SFML/System.hpp>
17 #include <SFML/Graphics.hpp>
18 #include <SFML/Window.hpp>
19 #include <SFML/Audio.hpp>
20
21 #include <map>
22 #include <iostream>
23 #include <cassert>
然后在BallGame.cpp中添加启动代码
1 // BallGame.cpp : 定义控制台应用程序的入口点。
2
3 #include "stdafx.h"
4 #include "Game.h"
5
6 int _tmain(int argc, _TCHAR* argv[])
7 {
8 Game::Start();
9 return 0;
10 }
当然,也需要新建一个名为Game.h的头文件,其代码如下
1 #pragma once
2
3 class Game
4 {
5
6 public:
7 static void Start();
8
9 private:
10 static bool IsExiting();
11 static void GameLoop();
12 //用枚举类型来代替常量表示游戏状态
13 enum GameState { Uninitialized, ShowingSplash, Paused,
14 ShowingMenu, Playing, Exiting };
15
16 static GameState _gameState;
17 static sf::RenderWindow _mainWindow;
18 };
补充点:根据原文介绍,把整个类都设计成static,是因为需要一个全局接口,而为什么不用单例模式呢?
是因为单例模式代码量比较多,原文作者想用比较直接和直观的方式表达出来。
在类之中使用static时要注意的地方:
1.静态方法只能接受静态成员变量
2.在静态方法里面并不存在this指针
3.不能在类的构造函数里面设置一个静态变量
4.必须在类的外部初始化静态变量
5.使用静态变量之前必须确保其已经初始化
最后,还必须要提供类的实现,其代码如下
View Code
1 #include "stdafx.h"
2 #include "Game.h"
3
4 void Game::Start(void)
5 {
6 if(_gameState != Uninitialized)
7 return;
8
9 //设置窗口参数
10 _mainWindow.create(sf::VideoMode(1024,768,32),"BallGame!");
11 _gameState = Game::Playing;
12
13 //游戏循环,当游戏状态为Exiting则退出游戏
14 while(!IsExiting())
15 {
16 GameLoop();
17 }
18
19 _mainWindow.close();
20 }
21
22 bool Game::IsExiting()
23 {
24 if(_gameState == Game::Exiting)
25 return true;
26 else
27 return false;
28 }
29
30 void Game::GameLoop()
31 {
32 sf::Event currentEvent;
33 while(_mainWindow.pollEvent(currentEvent))
34 {
35
36 switch(_gameState)
37 {
38 case Game::Playing:
39 {
40 //用红色填充游戏画面
41 _mainWindow.clear(sf::Color(255,0,0));
42 _mainWindow.display();
43
44 if(currentEvent.type == sf::Event::Closed)
45 {
46 _gameState = Game::Exiting;
47 }
48 break;
49 }
50 }
51 }
52 }
53
54 //此处要手动声明静态变量,不然编译器会报错
55 Game::GameState Game::_gameState = Uninitialized;
56 sf::RenderWindow Game::_mainWindow;
现在按F5试试吧,如果出现诸如下图的错误
请把SFML-2.0-rc -> bin文件夹里面的所有dll都拷贝到项目下的debug文件夹里面去就可以了
补充点:可能你会发现这里的代码跟原文的代码有出入,那是因为原文用的是SFML1.6版本,这里是用2.0,函数的方法名发生了改变
原文链接: https://www.cnblogs.com/tomboy/archive/2012/06/27/2566335.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/53621
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!