PuzzleSDK
Sprite3DFakeShadowTest类 参考

#include <Sprite3DTest.h>

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

Public 类型

enum  State { State_None = 0 , State_Idle = 0x01 , State_Move = 0x02 , State_Rotate = 0x04 }
 
- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 

Public 成员函数

 CREATE_FUNC (Sprite3DFakeShadowTest)
 
 Sprite3DFakeShadowTest ()
 
virtual ~Sprite3DFakeShadowTest ()
 
virtual std::string title () const override
 
virtual std::string subtitle () const override
 
void Move (cocos2d::Ref *sender, int value)
 
void updateCamera (float fDelta)
 
void move3D (float elapsedTime)
 
void updateState (float elapsedTime)
 
bool isState (unsigned int state, unsigned int bit) const
 
void onTouchesBegan (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void onTouchesMoved (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void onTouchesEnded (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
- Public 成员函数 继承自 Sprite3DTestDemo
virtual ~Sprite3DTestDemo ()
 
- 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
 

Private 属性

cocos2d::Camera * _camera
 
cocos2d::Vec3 _targetPos
 
unsigned int _curState
 
cocos2d::Sprite3D * _plane
 
cocos2d::Sprite3D * _orc
 
cocos2d::backend::ProgramState * _state = nullptr
 
cocos2d::EventListenerCustom * _backToForegroundListener
 

额外继承的成员函数

- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

详细描述

在文件 Sprite3DTest.h103 行定义.

成员枚举类型说明

◆ State

枚举值
State_None 
State_Idle 
State_Move 
State_Rotate 

在文件 Sprite3DTest.h106 行定义.

构造及析构函数说明

◆ Sprite3DFakeShadowTest()

Sprite3DFakeShadowTest::Sprite3DFakeShadowTest ( )

在文件 Sprite3DTest.cpp323 行定义.

324{
325 Size visibleSize = Director::getInstance()->getVisibleSize();
326
327 auto listener = EventListenerTouchAllAtOnce::create();
328 listener->onTouchesBegan = CC_CALLBACK_2(Sprite3DFakeShadowTest::onTouchesBegan, this);
329 listener->onTouchesMoved = CC_CALLBACK_2(Sprite3DFakeShadowTest::onTouchesMoved, this);
330 listener->onTouchesEnded = CC_CALLBACK_2(Sprite3DFakeShadowTest::onTouchesEnded, this);
331 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
332
333 auto layer = Layer::create();
334 addChild(layer, 0);
335 //create Camera
336 _camera = Camera::createPerspective(60, visibleSize.width / visibleSize.height, 0.1f, 200);
337 _camera->setCameraFlag(CameraFlag::USER1);
338 _camera->setPosition3D(Vec3(0.0f, 20.0f, 25.0f));
339 _camera->setRotation3D(Vec3(-60.0f, 0.0f, 0.0f));
340
341 //create a plane
342 _plane = Sprite3D::create("Sprite3DTest/plane.c3t");
343 _plane->setRotation3D(Vec3(90.0f, 0.0f, 0.0f));
344
345
346 auto mat = Sprite3DMaterial::createWithFilename("Sprite3DTest/FakeShadow.material");
347 _state = mat->getTechniqueByIndex(0)->getPassByIndex(0)->getProgramState();
348 _plane->setMaterial(mat);
349
350
351 auto location = _state->getUniformLocation("u_model_matrix");
352 auto transform = _plane->getNodeToWorldTransform();
353 _state->setUniform(location, transform.m, sizeof(transform.m));
354
355 layer->addChild(_plane);
356
357 //create the orc
358 _orc = Sprite3D::create("Sprite3DTest/orc.c3b");
359 _orc->setScale(0.2f);
360 _orc->setRotation3D(Vec3(0.0f, 180.0f, 0.0f));
361 _orc->setPosition3D(Vec3(0.0f, 0.0f, 10.0f));
362 _targetPos = _orc->getPosition3D();
363 location = _state->getUniformLocation("u_target_pos");
364 _state->setUniform(location, &_targetPos, sizeof(_targetPos));
365 layer->addChild(_orc);
366 layer->addChild(_camera);
367 layer->setCameraMask(2);
368
369 schedule(CC_SCHEDULE_SELECTOR(Sprite3DFakeShadowTest::updateCamera), 0.0f);
370
371#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
372 _backToForegroundListener = EventListenerCustom::create(EVENT_COME_TO_FOREGROUND,
373 [this](EventCustom*)
374 {
375 auto mat = Sprite3DMaterial::createWithFilename("Sprite3DTest/FakeShadow.material");
376 _state = mat->getTechniqueByIndex(0)->getPassByIndex(0)->getProgramState();
377 _plane->setMaterial(mat);
378 backend::UniformLocation loc = _state->getUniformLocation("u_model_matrix");
379 auto trans = _plane->getNodeToWorldTransform();
380 _state->setUniform(loc, &trans, sizeof(trans));
381 loc = _state->getUniformLocation("u_target_pos");
382 auto pos = _orc->getPosition3D();
383 _state->setUniform(loc, &pos, sizeof(pos));
384 }
385 );
386 Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(_backToForegroundListener, -1);
387#endif
388}
cocos2d::EventListenerCustom * _backToForegroundListener
Definition: Sprite3DTest.h:135
cocos2d::Sprite3D * _plane
Definition: Sprite3DTest.h:130
void onTouchesBegan(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
cocos2d::Sprite3D * _orc
Definition: Sprite3DTest.h:131
cocos2d::Camera * _camera
Definition: Sprite3DTest.h:127
cocos2d::backend::ProgramState * _state
Definition: Sprite3DTest.h:132
void onTouchesEnded(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
void updateCamera(float fDelta)
cocos2d::Vec3 _targetPos
Definition: Sprite3DTest.h:128

引用了 _backToForegroundListener, _camera, _orc, _plane, _state, _targetPos, onTouchesBegan(), onTouchesEnded(), onTouchesMoved() , 以及 updateCamera().

+ 函数调用图:

◆ ~Sprite3DFakeShadowTest()

Sprite3DFakeShadowTest::~Sprite3DFakeShadowTest ( )
virtual

在文件 Sprite3DTest.cpp390 行定义.

391{
392#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
393 Director::getInstance()->getEventDispatcher()->removeEventListener(_backToForegroundListener);
394#endif
395}

引用了 _backToForegroundListener.

成员函数说明

◆ CREATE_FUNC()

Sprite3DFakeShadowTest::CREATE_FUNC ( Sprite3DFakeShadowTest  )

◆ isState()

bool Sprite3DFakeShadowTest::isState ( unsigned int  state,
unsigned int  bit 
) const

在文件 Sprite3DTest.cpp504 行定义.

505{
506 return (state & bit) == bit;
507}

被这些函数引用 updateCamera().

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

◆ Move()

void Sprite3DFakeShadowTest::Move ( cocos2d::Ref *  sender,
int  value 
)

在文件 Sprite3DTest.cpp407 行定义.

408{
409 _orc->setPositionX(_orc->getPositionX() + value);
410
411}

引用了 _orc.

◆ move3D()

void Sprite3DFakeShadowTest::move3D ( float  elapsedTime)

在文件 Sprite3DTest.cpp459 行定义.

460{
461 Vec3 curPos = _orc->getPosition3D();
462 Vec3 newFaceDir = _targetPos - curPos;
463 newFaceDir.y = 0.0f;
464 newFaceDir.normalize();
465 Vec3 offset = newFaceDir * 25.0f * elapsedTime;
466 curPos += offset;
467 _orc->setPosition3D(curPos);
468 offset.x = offset.x;
469 offset.z = offset.z;
470 //pass the newest orc position
471 auto location = _state->getUniformLocation("u_target_pos");
472 auto position = _orc->getPosition3D();
473 _state->setUniform(location, &position, sizeof(position));
474}

引用了 _orc, _state , 以及 _targetPos.

被这些函数引用 updateCamera().

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

◆ onTouchesBegan()

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

在文件 Sprite3DTest.cpp509 行定义.

510{
511
512}

被这些函数引用 Sprite3DFakeShadowTest().

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

◆ onTouchesEnded()

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

在文件 Sprite3DTest.cpp518 行定义.

519{
520 for (auto &item : touches)
521 {
522 auto touch = item;
523 auto location = touch->getLocationInView();
524 if (_camera)
525 {
526 if (_orc)
527 {
528 Vec3 nearP(location.x, location.y, -1.0f), farP(location.x, location.y, 1.0f);
529
530 auto size = Director::getInstance()->getWinSize();
531 nearP = _camera->unproject(nearP);
532 farP = _camera->unproject(farP);
533 Vec3 dir(farP - nearP);
534 float dist = 0.0f;
535 float ndd = Vec3::dot(Vec3(0, 1, 0), dir);
536 if (ndd == 0)
537 dist = 0.0f;
538 float ndo = Vec3::dot(Vec3(0, 1, 0), nearP);
539 dist = (0 - ndo) / ndd;
540 Vec3 p = nearP + dist * dir;
541
542 if (p.x > 100)
543 p.x = 100;
544 if (p.x < -100)
545 p.x = -100;
546 if (p.z > 100)
547 p.z = 100;
548 if (p.z < -100)
549 p.z = -100;
550
551 _targetPos = p;
552 }
553 }
554 }
555}

引用了 _camera, _orc , 以及 _targetPos.

被这些函数引用 Sprite3DFakeShadowTest().

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

◆ onTouchesMoved()

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

在文件 Sprite3DTest.cpp514 行定义.

515{
516}

被这些函数引用 Sprite3DFakeShadowTest().

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

◆ subtitle()

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

重载 TestCase .

在文件 Sprite3DTest.cpp402 行定义.

403{
404 return "touch the screen to move around";
405}

◆ title()

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

重载 Sprite3DTestDemo .

在文件 Sprite3DTest.cpp397 行定义.

398{
399 return "fake shadow effect";
400}

◆ updateCamera()

void Sprite3DFakeShadowTest::updateCamera ( float  fDelta)

在文件 Sprite3DTest.cpp413 行定义.

414{
415 updateState(fDelta);
417 {
418 move3D(fDelta);
420 {
421 Vec3 curPos = _orc->getPosition3D();
422
423 Vec3 newFaceDir = _targetPos - curPos;
424 newFaceDir.y = 0;
425 newFaceDir.normalize();
426 Vec3 up;
427 _orc->getNodeToWorldTransform().getUpVector(&up);
428 up.normalize();
429 Vec3 right;
430 Vec3::cross(-newFaceDir, up, &right);
431 right.normalize();
432 Vec3 pos = Vec3(0, 0, 0);
433 Mat4 mat;
434 mat.m[0] = right.x;
435 mat.m[1] = right.y;
436 mat.m[2] = right.z;
437 mat.m[3] = 0.0f;
438
439 mat.m[4] = up.x;
440 mat.m[5] = up.y;
441 mat.m[6] = up.z;
442 mat.m[7] = 0.0f;
443
444 mat.m[8] = newFaceDir.x;
445 mat.m[9] = newFaceDir.y;
446 mat.m[10] = newFaceDir.z;
447 mat.m[11] = 0.0f;
448
449 mat.m[12] = pos.x;
450 mat.m[13] = pos.y;
451 mat.m[14] = pos.z;
452 mat.m[15] = 1.0f;
453 _orc->setAdditionalTransform(&mat);
454 }
455 }
456}
bool isState(unsigned int state, unsigned int bit) const
void move3D(float elapsedTime)
void updateState(float elapsedTime)
unsigned int _curState
Definition: Sprite3DTest.h:129

引用了 _curState, _orc, _targetPos, isState(), move3D(), State_Move, State_Rotate , 以及 updateState().

被这些函数引用 Sprite3DFakeShadowTest().

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

◆ updateState()

void Sprite3DFakeShadowTest::updateState ( float  elapsedTime)

在文件 Sprite3DTest.cpp476 行定义.

477{
478 Vec3 curPos = _orc->getPosition3D();
479 Vec3 curFaceDir;
480 _orc->getNodeToWorldTransform().getForwardVector(&curFaceDir);
481 curFaceDir = -curFaceDir;
482 curFaceDir.normalize();
483 Vec3 newFaceDir = _targetPos - curPos;
484 newFaceDir.y = 0.0f;
485 newFaceDir.normalize();
486 float cosAngle = std::fabs(Vec3::dot(curFaceDir, newFaceDir) - 1.0f);
487 float dist = curPos.distanceSquared(_targetPos);
488 if (dist <= 4.0f)
489 {
490 if (cosAngle <= 0.01f)
492 else
494 }
495 else
496 {
497 if (cosAngle > 0.01f)
499 else
501 }
502}

引用了 _curState, _orc, _targetPos, State_Idle, State_Move , 以及 State_Rotate.

被这些函数引用 updateCamera().

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

类成员变量说明

◆ _backToForegroundListener

cocos2d::EventListenerCustom* Sprite3DFakeShadowTest::_backToForegroundListener
private

在文件 Sprite3DTest.h135 行定义.

被这些函数引用 Sprite3DFakeShadowTest() , 以及 ~Sprite3DFakeShadowTest().

◆ _camera

cocos2d::Camera* Sprite3DFakeShadowTest::_camera
private

在文件 Sprite3DTest.h127 行定义.

被这些函数引用 onTouchesEnded() , 以及 Sprite3DFakeShadowTest().

◆ _curState

unsigned int Sprite3DFakeShadowTest::_curState
private

在文件 Sprite3DTest.h129 行定义.

被这些函数引用 updateCamera() , 以及 updateState().

◆ _orc

cocos2d::Sprite3D* Sprite3DFakeShadowTest::_orc
private

在文件 Sprite3DTest.h131 行定义.

被这些函数引用 Move(), move3D(), onTouchesEnded(), Sprite3DFakeShadowTest(), updateCamera() , 以及 updateState().

◆ _plane

cocos2d::Sprite3D* Sprite3DFakeShadowTest::_plane
private

在文件 Sprite3DTest.h130 行定义.

被这些函数引用 Sprite3DFakeShadowTest().

◆ _state

cocos2d::backend::ProgramState* Sprite3DFakeShadowTest::_state = nullptr
private

在文件 Sprite3DTest.h132 行定义.

被这些函数引用 move3D() , 以及 Sprite3DFakeShadowTest().

◆ _targetPos

cocos2d::Vec3 Sprite3DFakeShadowTest::_targetPos
private

在文件 Sprite3DTest.h128 行定义.

被这些函数引用 move3D(), onTouchesEnded(), Sprite3DFakeShadowTest(), updateCamera() , 以及 updateState().


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