使用C++与SFML编写一个简单的撞球游戏Part2——创建游戏窗口

环境搭建好了,接下来就开始正式编码了!!!

首先在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.使用静态变量之前必须确保其已经初始化

最后,还必须要提供类的实现,其代码如下
使用C++与SFML编写一个简单的撞球游戏Part2——创建游戏窗口使用C++与SFML编写一个简单的撞球游戏Part2——创建游戏窗口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试试吧,如果出现诸如下图的错误

使用C++与SFML编写一个简单的撞球游戏Part2——创建游戏窗口

请把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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午4:57
下一篇 2023年2月9日 上午4:57

相关推荐