PuzzleSDK
TerrainWalkThru类 参考

#include <TerrainTest.h>

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

Public 成员函数

 CREATE_FUNC (TerrainWalkThru)
 
 TerrainWalkThru ()
 
virtual std::string title () const override
 
virtual std::string subtitle () const override
 
void onTouchesBegan (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void onTouchesEnd (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
- Public 成员函数 继承自 TestCase
 TestCase ()
 
 ~TestCase ()
 
virtual Type getTestType () const
 
virtual float getDuration () const
 
virtual std::string getExpectedOutput () const
 
virtual std::string getActualOutput () const
 
virtual void restartTestCallback (cocos2d::Ref *sender)
 
virtual void nextTestCallback (cocos2d::Ref *sender)
 
virtual void priorTestCallback (cocos2d::Ref *sender)
 
virtual void onBackCallback (cocos2d::Ref *sender)
 
void setTestSuite (TestSuite *testSuite)
 
TestSuitegetTestSuite () const
 
float getRunTime () const
 
void setTestCaseName (const std::string &name)
 
std::string getTestCaseName () const
 
const cocos2d::Label * getSubtitleLable () const
 
const cocos2d::MenuItemImage * getRestartTestItem () const
 
virtual void onEnter () override
 

Protected 属性

cocos2d::Camera * _camera
 
cocos2d::Terrain * _terrain
 
Player_player
 
- Protected 属性 继承自 TerrainTestDemo
std::string _title
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

额外继承的成员函数

- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 
- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 

详细描述

在文件 TerrainTest.h84 行定义.

构造及析构函数说明

◆ TerrainWalkThru()

TerrainWalkThru::TerrainWalkThru ( )

在文件 TerrainTest.cpp113 行定义.

114{
115 auto listener = EventListenerTouchAllAtOnce::create();
116 listener->onTouchesBegan = CC_CALLBACK_2(TerrainWalkThru::onTouchesBegan, this);
117 listener->onTouchesEnded = CC_CALLBACK_2(TerrainWalkThru::onTouchesEnd, this);
118 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
119
120 Size visibleSize = Director::getInstance()->getVisibleSize();
121
122 //use custom camera
123 _camera = Camera::createPerspective(60,visibleSize.width/visibleSize.height,0.1f,200);
124 _camera->setCameraFlag(CameraFlag::USER1);
125 addChild(_camera);
126
127 Terrain::DetailMap r("TerrainTest/dirt.jpg"),g("TerrainTest/Grass2.jpg",10),b("TerrainTest/road.jpg"),a("TerrainTest/GreenSkin.jpg",20);
128
129 Terrain::TerrainData data("TerrainTest/heightmap16.jpg","TerrainTest/alphamap.png",r,g,b,a,Size(32,32),40.0f,2);
130 _terrain = Terrain::create(data,Terrain::CrackFixedType::SKIRT);
131 _terrain->setMaxDetailMapAmount(4);
132 _terrain->setCameraMask(2);
133 _terrain->setDrawWire(false);
134
135 _terrain->setSkirtHeightRatio(3);
136 _terrain->setLODDistance(64,128,192);
137 _player = Player::create("Sprite3DTest/girl.c3b",_camera,_terrain);
138 _player->setCameraMask(2);
139 _player->setScale(0.08f);
140 _player->setPositionY(_terrain->getHeight(_player->getPositionX(),_player->getPositionZ())+PLAYER_HEIGHT);
141
142 // add Particle3D for test blend
143 auto rootps = PUParticleSystem3D::create("Particle3D/scripts/mp_torch.pu");
144 rootps->setCameraMask((unsigned short)CameraFlag::USER1);
145 rootps->setScale(30.0f);
146 rootps->startParticleSystem();
147 _player->addChild(rootps);
148
149 // add BillBoard for test blend
150 auto billboard = BillBoard::create("Images/btn-play-normal.png");
151 billboard->setPosition3D(Vec3(0,180,0));
152 billboard->setCameraMask((unsigned short)CameraFlag::USER1);
153 _player->addChild(billboard);
154
155 auto animation = Animation3D::create("Sprite3DTest/girl.c3b","Take 001");
156 if (animation)
157 {
158 auto animate = Animate3D::create(animation);
159 _player->runAction(RepeatForever::create(animate));
160 }
161
162 _camera->setPosition3D(_player->getPosition3D()+camera_offset);
163 _camera->setRotation3D(Vec3(-45,0,0));
164
165 addChild(_player);
166 addChild(_terrain);
167}
#define PLAYER_HEIGHT
Definition: TerrainTest.cpp:37
Vec3 camera_offset(0, 45, 60)
static Player * create(const char *file, cocos2d::Camera *cam, cocos2d::Terrain *terrain)
Player * _player
Definition: TerrainTest.h:96
void onTouchesEnd(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
cocos2d::Camera * _camera
Definition: TerrainTest.h:94
cocos2d::Terrain * _terrain
Definition: TerrainTest.h:95
void onTouchesBegan(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)

引用了 _camera, _player, _terrain, camera_offset(), Player::create(), onTouchesBegan(), onTouchesEnd() , 以及 PLAYER_HEIGHT.

+ 函数调用图:

成员函数说明

◆ CREATE_FUNC()

TerrainWalkThru::CREATE_FUNC ( TerrainWalkThru  )

◆ onTouchesBegan()

void TerrainWalkThru::onTouchesBegan ( const std::vector< cocos2d::Touch * > &  touches,
cocos2d::Event *  event 
)

在文件 TerrainTest.cpp170 行定义.

171{
172}

被这些函数引用 TerrainWalkThru().

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

◆ onTouchesEnd()

void TerrainWalkThru::onTouchesEnd ( const std::vector< cocos2d::Touch * > &  touches,
cocos2d::Event *  event 
)

在文件 TerrainTest.cpp174 行定义.

175{
176 auto touch = touches[0];
177 auto location = touch->getLocationInView();
178 if(_camera)
179 {
180 if(_player)
181 {
182 Vec3 nearP(location.x, location.y, 0.0f), farP(location.x, location.y, 1.0f);
183
184 auto size = Director::getInstance()->getWinSize();
185 _camera->unproject(size, &nearP, &nearP);
186 _camera->unproject(size, &farP, &farP);
187 Vec3 dir = farP - nearP;
188 dir.normalize();
189 Vec3 collisionPoint(-999,-999,-999);
190 bool isInTerrain = _terrain->getIntersectionPoint(Ray(nearP, dir), collisionPoint);
191 if (!isInTerrain)
192 {
193 _player->idle();
194 return;
195 }
196 dir = collisionPoint - _player->getPosition3D();
197 dir.y = 0;
198 dir.normalize();
199 _player->_headingAngle = -1*acos(dir.dot(Vec3(0,0,-1)));
200 dir.cross(dir,Vec3(0,0,-1),&_player->_headingAxis);
201 _player->_targetPos=collisionPoint;
202 _player->forward();
203 }
204 }
205}
cocos2d::Vec3 _targetPos
Definition: TerrainTest.h:73
float _headingAngle
Definition: TerrainTest.h:75
cocos2d::Vec3 _headingAxis
Definition: TerrainTest.h:76
void idle()
void forward()

引用了 _camera, Player::_headingAngle, Player::_headingAxis, _player, Player::_targetPos, _terrain, Player::forward() , 以及 Player::idle().

被这些函数引用 TerrainWalkThru().

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

◆ subtitle()

std::string TerrainWalkThru::subtitle ( ) const
overridevirtual

重载 TestCase .

在文件 TerrainTest.cpp108 行定义.

109{
110 return "touch to move";
111}

◆ title()

std::string TerrainWalkThru::title ( ) const
overridevirtual

重载 TestCase .

在文件 TerrainTest.cpp103 行定义.

104{
105 return "Player walk around in terrain";
106}

类成员变量说明

◆ _camera

cocos2d::Camera* TerrainWalkThru::_camera
protected

在文件 TerrainTest.h94 行定义.

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

◆ _player

Player* TerrainWalkThru::_player
protected

在文件 TerrainTest.h96 行定义.

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

◆ _terrain

cocos2d::Terrain* TerrainWalkThru::_terrain
protected

在文件 TerrainTest.h95 行定义.

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


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