PuzzleSDK
BillBoardTest类 参考

#include <BillBoardTest.h>

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

Public 成员函数

virtual ~BillBoardTest ()
 
 CREATE_FUNC (BillBoardTest)
 
 BillBoardTest ()
 
virtual std::string title () const override
 
virtual std::string subtitle () const override
 
virtual void update (float dt) override
 
void addNewBillBoardWithCoords (cocos2d::Vec3 p)
 
void addNewAniBillBoardWithCoords (cocos2d::Vec3 p)
 
void rotateCameraCallback (cocos2d::Ref *sender, float value)
 
void onTouchesMoved (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void menuCallback_orientedPoint (cocos2d::Ref *sender)
 
void menuCallback_orientedPlane (cocos2d::Ref *sender)
 
- 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::Layer * _layerBillBoard
 
std::vector< cocos2d::BillBoard * > _billboards
 
- 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
 

详细描述

在文件 BillBoardTest.h49 行定义.

构造及析构函数说明

◆ ~BillBoardTest()

BillBoardTest::~BillBoardTest ( )
virtual

在文件 BillBoardTest.cpp221 行定义.

222{
223 if (_camera)
224 {
225 _camera = nullptr;
226 }
227}
cocos2d::Camera * _camera
Definition: BillBoardTest.h:67

引用了 _camera.

◆ BillBoardTest()

BillBoardTest::BillBoardTest ( )

在文件 BillBoardTest.cpp113 行定义.

114: _camera(nullptr)
115{
116 //Create touch listener
117 auto listener = EventListenerTouchAllAtOnce::create();
118 listener->onTouchesMoved = CC_CALLBACK_2(BillBoardTest::onTouchesMoved, this);
119 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
120
121 auto layer3D=Layer::create();
122 addChild(layer3D,0);
123 _layerBillBoard = layer3D;
124 auto s = Director::getInstance()->getWinSize();
125 if (_camera == nullptr)
126 {
127 _camera=Camera::createPerspective(60, (float)s.width/s.height, 1, 500);
128 _camera->setCameraFlag(CameraFlag::USER1);
129 _layerBillBoard->addChild(_camera);
130 }
131
132 //Create rotating billboards
133 std::string imgs[3] = {"Images/Icon.png", "Images/r2.png"};
134 for (unsigned int i = 0; i < 4; ++i)
135 {
136 Layer *layer = Layer::create();
137 auto billboard = BillBoard::create(imgs[(unsigned int)(CCRANDOM_0_1() * 1 + 0.5f)]);
138 billboard->setScale(0.5f);
139 billboard->setPosition3D(Vec3(0.0f, 0.0f, CCRANDOM_MINUS1_1() * 150.0f));
140 billboard->setOpacity(static_cast<uint8_t>(CCRANDOM_0_1() * 128 + 128));
141 _billboards.push_back(billboard);
142 layer->addChild(billboard);
143 _layerBillBoard->addChild(layer);
144 layer->runAction( RepeatForever::create( RotateBy::create( CCRANDOM_0_1() * 10, Vec3(0.0f, 45.0f, 0.0f) ) ) );
145 }
146
147 {
148 auto billboard = BillBoard::create("Images/Icon.png");
149 billboard->setScale(0.2f);
150 billboard->setPosition3D(Vec3(0.0f, 30.0f, 0.0f));
151
152 auto billboard2 = BillBoard::create("Images/r2.png");
153 billboard2->setPosition3D(Vec3(0.0f, 0.0f, 100.0f));
154 billboard->addChild(billboard2);
155 _billboards.push_back(billboard);
156 _billboards.push_back(billboard2);
157
158 auto sprite3d = Sprite3D::create("Sprite3DTest/orc.c3t");
159 sprite3d->setScale(2.0f);
160 sprite3d->addChild(billboard);
161 sprite3d->runAction( RepeatForever::create( RotateBy::create( 10.0f, Vec3(0.0f, 360.0f, 0.0f) ) ) );
162 _layerBillBoard->addChild(sprite3d);
163 }
164
165 addNewBillBoardWithCoords(Vec3(20.0f,5.0f,0.0f));
166 addNewBillBoardWithCoords(Vec3(60.0f,5.0f,0.0f));
167 addNewBillBoardWithCoords(Vec3(100.0f,5.0f,0.0f));
168 addNewBillBoardWithCoords(Vec3(140.0f,5.0f,0.0f));
169 addNewBillBoardWithCoords(Vec3(180.0f,5.0f,0.0f));
170
171 addNewAniBillBoardWithCoords(Vec3(-20.0f,0.0f,0.0f));
172 addNewAniBillBoardWithCoords(Vec3(-60.0f,0.0f,0.0f));
173 addNewAniBillBoardWithCoords(Vec3(-100.0f,0.0f,0.0f));
174 addNewAniBillBoardWithCoords(Vec3(-140.0f,0.0f,0.0f));
175 addNewAniBillBoardWithCoords(Vec3(-180.0f,0.0f,0.0f));
176
177 _camera->setPosition3D(Vec3(0.0f, 100.0f, 230.0f));
178 _camera->lookAt(Vec3(0,0,0), Vec3(0.0f,1.0f,0.0f));
179
180 TTFConfig ttfConfig("fonts/arial.ttf", 16);
181 auto label1 = Label::createWithTTF(ttfConfig,"rotate+");
182 auto menuItem1 = MenuItemLabel::create(label1, CC_CALLBACK_1(BillBoardTest::rotateCameraCallback,this,10));
183 auto label2 = Label::createWithTTF(ttfConfig,"rotate-");
184 auto menuItem2 = MenuItemLabel::create(label2, CC_CALLBACK_1(BillBoardTest::rotateCameraCallback,this,-10));
185 auto menu = Menu::create(menuItem1, menuItem2, nullptr);
186 menu->setPosition(Vec2::ZERO);
187 menuItem1->setPosition( Vec2( s.width-80, VisibleRect::top().y-160) );
188 menuItem2->setPosition( Vec2( s.width-80, VisibleRect::top().y-190) );
189 addChild(menu, 0);
190 _layerBillBoard->setCameraMask(2);
191
192 label1 = Label::createWithTTF(ttfConfig,"Point Oriented");
193 menuItem1 = MenuItemLabel::create(label1,CC_CALLBACK_1(BillBoardTest::menuCallback_orientedPoint,this) );
194 label2 = Label::createWithTTF(ttfConfig,"Plane Oriented");
195 menuItem2 = MenuItemLabel::create(label2,CC_CALLBACK_1(BillBoardTest::menuCallback_orientedPlane,this) );
196 menuItem1->setPosition( Vec2( s.width-80, VisibleRect::top().y-100) );
197 menuItem2->setPosition( Vec2( s.width-80, VisibleRect::top().y-130) );
198
199 menu = Menu::create(menuItem1, menuItem2, nullptr);
200 menu->setPosition(Vec2(0,0));
201 this->addChild(menu, 10);
203
204 schedule(CC_SCHEDULE_SELECTOR(BillBoardTest::update));
205}
virtual void update(float dt) override
void menuCallback_orientedPlane(cocos2d::Ref *sender)
cocos2d::Layer * _layerBillBoard
Definition: BillBoardTest.h:68
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
void addNewBillBoardWithCoords(cocos2d::Vec3 p)
std::vector< cocos2d::BillBoard * > _billboards
Definition: BillBoardTest.h:70
void addNewAniBillBoardWithCoords(cocos2d::Vec3 p)
void menuCallback_orientedPoint(cocos2d::Ref *sender)
void rotateCameraCallback(cocos2d::Ref *sender, float value)
static cocos2d::Vec2 top()
Definition: VisibleRect.cpp:57

引用了 _billboards, _camera, _layerBillBoard, addNewAniBillBoardWithCoords(), addNewBillBoardWithCoords(), menuCallback_orientedPlane(), menuCallback_orientedPoint(), onTouchesMoved(), rotateCameraCallback(), VisibleRect::top() , 以及 update().

+ 函数调用图:

成员函数说明

◆ addNewAniBillBoardWithCoords()

void BillBoardTest::addNewAniBillBoardWithCoords ( cocos2d::Vec3  p)

在文件 BillBoardTest.cpp250 行定义.

251{
252 for (unsigned int i = 0; i < 10; ++i)
253 {
254 auto billboardAni = BillBoard::create("Images/grossini.png");
255 billboardAni->setScale(0.5f);
256 billboardAni->setPosition3D(Vec3(p.x, p.y, -150.0f + 30 * i));
257 _layerBillBoard->addChild(billboardAni);
258
259 auto animation = Animation::create();
260 for( int i=1;i<15;i++)
261 {
262 char szName1[100] = {0};
263 sprintf(szName1, "Images/grossini_dance_%02d.png", i);
264 animation->addSpriteFrameWithFile(szName1);
265 }
266 // should last 2.8 seconds. And there are 14 frames.
267 animation->setDelayPerUnit(2.8f / 14.0f);
268 animation->setRestoreOriginalFrame(true);
269
270 auto action = Animate::create(animation);
271 billboardAni->runAction(RepeatForever::create(action));
272 billboardAni->setOpacity(static_cast<uint8_t>(CCRANDOM_0_1() * 128 + 128));
273 _billboards.push_back(billboardAni);
274 }
275}

引用了 _billboards , 以及 _layerBillBoard.

被这些函数引用 BillBoardTest().

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

◆ addNewBillBoardWithCoords()

void BillBoardTest::addNewBillBoardWithCoords ( cocos2d::Vec3  p)

在文件 BillBoardTest.cpp236 行定义.

237{
238 std::string imgs[3] = {"Images/Icon.png", "Images/r2.png"};
239 for (unsigned int i = 0; i < 10; ++i)
240 {
241 auto billboard = BillBoard::create(imgs[(unsigned int)(CCRANDOM_0_1() * 1 + 0.5f)]);
242 billboard->setScale(0.5f);
243 billboard->setPosition3D(Vec3(p.x, p.y, -150.0f + 30 * i));
244 billboard->setOpacity(static_cast<uint8_t>(CCRANDOM_0_1() * 128 + 128));
245
246 _layerBillBoard->addChild(billboard);
247 _billboards.push_back(billboard);
248 }
249}

引用了 _billboards , 以及 _layerBillBoard.

被这些函数引用 BillBoardTest().

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

◆ CREATE_FUNC()

BillBoardTest::CREATE_FUNC ( BillBoardTest  )

◆ menuCallback_orientedPlane()

void BillBoardTest::menuCallback_orientedPlane ( cocos2d::Ref *  sender)

在文件 BillBoardTest.cpp214 行定义.

215{
216 for (auto& billboard : _billboards) {
217 billboard->setMode(BillBoard::Mode::VIEW_PLANE_ORIENTED);
218 }
219}

引用了 _billboards.

被这些函数引用 BillBoardTest().

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

◆ menuCallback_orientedPoint()

void BillBoardTest::menuCallback_orientedPoint ( cocos2d::Ref *  sender)

在文件 BillBoardTest.cpp207 行定义.

208{
209 for (auto& billboard : _billboards) {
210 billboard->setMode(BillBoard::Mode::VIEW_POINT_ORIENTED);
211 }
212}

引用了 _billboards.

被这些函数引用 BillBoardTest().

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

◆ onTouchesMoved()

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

在文件 BillBoardTest.cpp280 行定义.

281{
282 if(touches.size()==1)
283 {
284 auto touch = touches[0];
285 auto location = touch->getLocation();
286 auto PreviousLocation = touch->getPreviousLocation();
287 Point newPos = PreviousLocation - location;
288
289 Vec3 cameraDir;
290 Vec3 cameraRightDir;
291 _camera->getNodeToWorldTransform().getForwardVector(&cameraDir);
292 cameraDir.normalize();
293 cameraDir.y=0;
294 _camera->getNodeToWorldTransform().getRightVector(&cameraRightDir);
295 cameraRightDir.normalize();
296 cameraRightDir.y=0;
297 Vec3 cameraPos= _camera->getPosition3D();
298 cameraPos+=cameraDir*newPos.y*0.5;
299 cameraPos+=cameraRightDir*newPos.x*0.5;
300 _camera->setPosition3D(cameraPos);
301 }
302}

引用了 _camera.

被这些函数引用 BillBoardTest().

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

◆ rotateCameraCallback()

void BillBoardTest::rotateCameraCallback ( cocos2d::Ref *  sender,
float  value 
)

在文件 BillBoardTest.cpp304 行定义.

305{
306 Vec3 rotation3D= _camera->getRotation3D();
307 rotation3D.y+= value;
308 _camera->setRotation3D(rotation3D);
309}

引用了 _camera.

被这些函数引用 BillBoardTest().

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

◆ subtitle()

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

重载 TestCase .

在文件 BillBoardTest.cpp232 行定义.

233{
234 return "";
235}

◆ title()

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

重载 TestCase .

在文件 BillBoardTest.cpp228 行定义.

229{
230 return "BillBoard Test";
231}

◆ update()

void BillBoardTest::update ( float  dt)
overridevirtual

在文件 BillBoardTest.cpp276 行定义.

277{
278}

被这些函数引用 BillBoardTest().

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

类成员变量说明

◆ _billboards

std::vector<cocos2d::BillBoard*> BillBoardTest::_billboards
protected

◆ _camera

cocos2d::Camera* BillBoardTest::_camera
protected

在文件 BillBoardTest.h67 行定义.

被这些函数引用 BillBoardTest(), onTouchesMoved(), rotateCameraCallback() , 以及 ~BillBoardTest().

◆ _layerBillBoard

cocos2d::Layer* BillBoardTest::_layerBillBoard
protected

在文件 BillBoardTest.h68 行定义.

被这些函数引用 addNewAniBillBoardWithCoords(), addNewBillBoardWithCoords() , 以及 BillBoardTest().


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