PuzzleSDK
Player类 参考

#include <TerrainTest.h>

+ 类 Player 继承关系图:
+ Player 的协作图:

Public 成员函数

virtual bool isDone () const
 
virtual void update (float dt)
 
void turnLeft ()
 
void turnRight ()
 
void forward ()
 
void backward ()
 
void idle ()
 
void updateState ()
 

静态 Public 成员函数

static Playercreate (const char *file, cocos2d::Camera *cam, cocos2d::Terrain *terrain)
 

Public 属性

cocos2d::Vec3 _targetPos
 
float _headingAngle
 
cocos2d::Vec3 _headingAxis
 

Private 属性

cocos2d::Terrain * _terrain
 
cocos2d::Camera * _cam
 
int _playerState
 

详细描述

在文件 TerrainTest.h61 行定义.

成员函数说明

◆ backward()

void Player::backward ( )

在文件 TerrainTest.cpp301 行定义.

302{
304}
#define PLAYER_STATE_BACKWARD
Definition: TerrainTest.h:59
int _playerState
Definition: TerrainTest.h:80

引用了 _playerState , 以及 PLAYER_STATE_BACKWARD.

◆ create()

Player * Player::create ( const char *  file,
cocos2d::Camera *  cam,
cocos2d::Terrain *  terrain 
)
static

在文件 TerrainTest.cpp327 行定义.

328{
329 //
330 auto sprite = new (std::nothrow) Player();
331 if (sprite && sprite->initWithFile(file))
332 {
333 sprite->_headingAngle = 0;
334 sprite->_playerState = PLAYER_STATE_IDLE;
335 sprite->_cam = cam;
336 sprite->_terrain = terrain;
337 sprite->autorelease();
338 sprite->scheduleUpdate();
339 return sprite;
340 }
341 CC_SAFE_DELETE(sprite);
342 return nullptr;
343}
#define PLAYER_STATE_IDLE
Definition: TerrainTest.h:57
float _headingAngle
Definition: TerrainTest.h:75

引用了 _headingAngle , 以及 PLAYER_STATE_IDLE.

被这些函数引用 Scene3DTestScene::createWorld3D() , 以及 TerrainWalkThru::TerrainWalkThru().

+ 这是这个函数的调用关系图:

◆ forward()

void Player::forward ( )

在文件 TerrainTest.cpp296 行定义.

297{
299}
#define PLAYER_STATE_FORWARD
Definition: TerrainTest.h:58

引用了 _playerState , 以及 PLAYER_STATE_FORWARD.

被这些函数引用 Scene3DTestScene::onTouchEnd() , 以及 TerrainWalkThru::onTouchesEnd().

+ 这是这个函数的调用关系图:

◆ idle()

void Player::idle ( )

在文件 TerrainTest.cpp290 行定义.

291{
293}

引用了 _playerState , 以及 PLAYER_STATE_IDLE.

被这些函数引用 Scene3DTestScene::onTouchEnd() , 以及 TerrainWalkThru::onTouchesEnd().

+ 这是这个函数的调用关系图:

◆ isDone()

bool Player::isDone ( ) const
virtual

在文件 TerrainTest.cpp208 行定义.

209{
210 return false;
211}

◆ turnLeft()

void Player::turnLeft ( )

在文件 TerrainTest.cpp280 行定义.

281{
283}
#define PLAYER_STATE_LEFT
Definition: TerrainTest.h:55

引用了 _playerState , 以及 PLAYER_STATE_LEFT.

◆ turnRight()

void Player::turnRight ( )

在文件 TerrainTest.cpp285 行定义.

286{
288}
#define PLAYER_STATE_RIGHT
Definition: TerrainTest.h:56

引用了 _playerState , 以及 PLAYER_STATE_RIGHT.

◆ update()

void Player::update ( float  dt)
virtual

在文件 TerrainTest.cpp214 行定义.

215{
216 auto player = (Sprite3D *)this;
217 switch (_playerState)
218 {
220 break;
222 {
223 Vec3 curPos= player->getPosition3D();
224 Vec3 newFaceDir = _targetPos - curPos;
225 newFaceDir.y = 0.0f;
226 newFaceDir.normalize();
227 Vec3 offset = newFaceDir * 25.0f * dt;
228 curPos+=offset;
229 player->setPosition3D(curPos);
230 }
231 break;
233 {
234 Vec3 forward_vec;
235 player->getNodeToWorldTransform().getForwardVector(&forward_vec);
236 forward_vec.normalize();
237 player->setPosition3D(player->getPosition3D()-forward_vec*15*dt);
238 }
239 break;
241 {
242 player->setRotation3D(player->getRotation3D()+Vec3(0,25*dt,0));
243 }
244 break;
246 {
247 player->setRotation3D(player->getRotation3D()+Vec3(0,-25*dt,0));
248 }
249 break;
250 default:
251 break;
252 }
253 // transform player position to world coord
254 auto playerPos = player->getPosition3D();
255 auto playerModelMat = player->getParent()->getNodeToWorldTransform();
256 playerModelMat.transformPoint(&playerPos);
257 Vec3 Normal;
258 float player_h = _terrain->getHeight(playerPos.x, playerPos.z,&Normal);
259 if (Normal.isZero())//check the player whether is out of the terrain
260 {
261 player_h = playerPos.y;
262 }
263 else
264 {
265 player_h += PLAYER_HEIGHT;
266 }
267 player->setPositionY(player_h);
268 Quaternion q2;
269 q2.createFromAxisAngle(Vec3(0,1,0),(float)-M_PI,&q2);
270
271 Quaternion headingQ;
272 headingQ.createFromAxisAngle(_headingAxis,_headingAngle,&headingQ);
273 player->setRotationQuat(headingQ*q2);
274 auto vec_offset =Vec4(camera_offset.x,camera_offset.y,camera_offset.z,1);
275 vec_offset = player->getNodeToWorldTransform()*vec_offset;
276 _cam->setPosition3D(player->getPosition3D() + camera_offset);
277 updateState();
278}
#define PLAYER_HEIGHT
Definition: TerrainTest.cpp:37
Vec3 camera_offset(0, 45, 60)
cocos2d::Terrain * _terrain
Definition: TerrainTest.h:78
cocos2d::Vec3 _targetPos
Definition: TerrainTest.h:73
cocos2d::Vec3 _headingAxis
Definition: TerrainTest.h:76
cocos2d::Camera * _cam
Definition: TerrainTest.h:79
void updateState()

引用了 _cam, _headingAngle, _headingAxis, _playerState, _targetPos, _terrain, camera_offset(), PLAYER_HEIGHT, PLAYER_STATE_BACKWARD, PLAYER_STATE_FORWARD, PLAYER_STATE_IDLE, PLAYER_STATE_LEFT, PLAYER_STATE_RIGHT , 以及 updateState().

+ 函数调用图:

◆ updateState()

void Player::updateState ( )

在文件 TerrainTest.cpp306 行定义.

307{
308 auto player = (Sprite3D * )this;
309 switch (_playerState)
310 {
312 {
313 Vec2 player_pos =Vec2(player->getPositionX(),player->getPositionZ());
314 Vec2 targetPos = Vec2(_targetPos.x,_targetPos.z);
315 auto dist = player_pos.distance(targetPos);
316 if(dist<1)
317 {
319 }
320 }
321 break;
322 default:
323 break;
324 }
325}

引用了 _playerState, _targetPos, PLAYER_STATE_FORWARD , 以及 PLAYER_STATE_IDLE.

被这些函数引用 update().

+ 这是这个函数的调用关系图:

类成员变量说明

◆ _cam

cocos2d::Camera* Player::_cam
private

在文件 TerrainTest.h79 行定义.

被这些函数引用 update().

◆ _headingAngle

float Player::_headingAngle

在文件 TerrainTest.h75 行定义.

被这些函数引用 create(), Scene3DTestScene::onTouchEnd(), TerrainWalkThru::onTouchesEnd() , 以及 update().

◆ _headingAxis

cocos2d::Vec3 Player::_headingAxis

在文件 TerrainTest.h76 行定义.

被这些函数引用 Scene3DTestScene::onTouchEnd(), TerrainWalkThru::onTouchesEnd() , 以及 update().

◆ _playerState

int Player::_playerState
private

在文件 TerrainTest.h80 行定义.

被这些函数引用 backward(), forward(), idle(), turnLeft(), turnRight(), update() , 以及 updateState().

◆ _targetPos

cocos2d::Vec3 Player::_targetPos

在文件 TerrainTest.h73 行定义.

被这些函数引用 Scene3DTestScene::onTouchEnd(), TerrainWalkThru::onTouchesEnd(), update() , 以及 updateState().

◆ _terrain

cocos2d::Terrain* Player::_terrain
private

在文件 TerrainTest.h78 行定义.

被这些函数引用 update().


该类的文档由以下文件生成: