用C 和SFML寫遊戲 移動我們的Player

2021-09-24 11:28:04 字數 2446 閱讀 3253

在上一節中,我們搭建了遊戲的基本框架,用迴圈處理我們的遊戲世界,還掌握了一些方法去解決因機器效能不同而引起的問題。在這一節中,我們將會學習:

建立player

移動我們的player這裡,將會用**矩形(sf::rectangleshape)**代替我們之前的圓形,player應該有這幾個屬性,分別是它的形狀、大小和顏色,它的方向,它的速度。

因此我們建立了這麼乙個player

class player : public sf::drawable 

void update(sf::time deltatime);

bool ismoving;

int rotation;

private:

virtual void draw(sf::rendertarget& target, sf::renderstates states) const override;

sf::rectangleshape _shape;

sf::vector2f _velocity;

};複製**

player是乙個可繪製的物件,因此它繼承自sf::drawable

這裡delete關鍵字的作用跟game類中的是一樣的。

通過查詢sf::rectangleshape類中的 **setposition()**方法,它有兩個過載方法,分別是:

void setposition (float x, float y)

void setposition (const vector2f &position)

乙個有乙個引數,另乙個有兩個引數,因此 player 類中的setposition()使用了變長引數模版。

ismoving代表 player是否在移動,rotation可以改變方向。

接下來就是具體實現了。

首先是player的初始化,**比較簡單,這裡就不做解釋了。

player::player() : _shape(sf::vector2f(100,100))

複製**

然後是update的實現

void player::update(sf::time deltatime) 

if (ismoving)

_shape.move(seconds * _velocity);

}複製**

通過rotation引數可以改變方向

ismoving判定player是否在移動,如果是則給它繼續加速,加速度大小這裡為60.0

float angle = _shape.getrotation() / 180 * m_pi - m_pi/2;

複製**

這段**計算出的是當前player移動的角度,減去m_pi/2是為了是初始方向是向上的。

有了 player 類,當然還需要讓使用者去改變它的狀態,這裡可以通過簡單的事件處理解決。事件處理在game類的processevents方法中,直接看**:

while (_window.pollevent(event))  else if (event.type == sf::event::keypressed)  else if (event.key.code == sf::keyboard::up)  else if (event.key.code == sf::keyboard::left)  else if (event.key.code == sf::keyboard::right) 

} else if (event.type == sf::event::keyreleased)

}複製**

**簡單粗暴,方向鍵的左右控制player向左向右旋轉,up鍵player加速。

雖然很簡陋,但是好歹執行了起來。這裡沒有做邊界處理,可以看到最後我們的player跑到畫面外去了。

這一節中的事件處理方式只做為演示,因此**很粗糙,下一節我們將會學習如何將事件處理管理起來。:smiley:

用Python和Pygame寫遊戲 入門

windows7 下安裝pygame 安裝好,可以用下面的方法確認有沒有安裝成功 import pygame print pygame.ver 2.新的hello world coding utf 8 背景 游標 mouse image filename fugu.png import pygame...

用C語言寫貪吃蛇遊戲

輸入標頭檔案,設定函式,其中snakemove 是實現蛇運動的函式,put food 是隨機放置金幣的函式,printmap 是輸出影象的函式,x y記錄蛇尾的座標,snakex和snakey記錄蛇的初始座標。include include include include define snake ...

興趣篇 用C語言寫打字母遊戲

昨天說的,以後會寫和小遊戲相關的部落格,事不宜遲,今天就先開始用最簡單的c語言編寫乙個簡單的打字母小遊戲吧。應今天我的軟體工程老師的一句話 當做一件事時,如果能很快的從中得到正反饋,我們將會有成就感,我們將會提高對它的興趣。我們程式設計的入門語言是c語言,是一門相對簡單的程式語言,但是大多數大學生或...