PuzzleSDK
Sprite3DWithOBBPerformanceTest类 参考

#include <Sprite3DTest.h>

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

Public 成员函数

 CREATE_FUNC (Sprite3DWithOBBPerformanceTest)
 
 Sprite3DWithOBBPerformanceTest ()
 
virtual std::string title () const override
 
virtual std::string subtitle () const override
 
virtual void update (float dt) override
 
void addNewOBBWithCoords (cocos2d::Vec2 p)
 
void addNewSpriteWithCoords (cocos2d::Vec2 p)
 
void onTouchesBegan (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void onTouchesEnded (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void onTouchesMoved (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
void addOBBCallback (cocos2d::Ref *sender)
 
void delOBBCallback (cocos2d::Ref *sender)
 
void addOBBWithCount (float value)
 
void delOBBWithCount (float value)
 
- 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
 

Protected 成员函数

void initDrawBox ()
 
void reachEndCallBack ()
 
void unproject (const cocos2d::Mat4 &viewProjection, const cocos2d::Size *viewport, cocos2d::Vec3 *src, cocos2d::Vec3 *dst)
 
void calculateRayByLocationInView (cocos2d::Ray *ray, const cocos2d::Vec2 &location)
 

Protected 属性

cocos2d::Sprite3D * _sprite
 
std::vector< cocos2d::OBB > _obb
 
cocos2d::DrawNode3D * _drawOBB
 
cocos2d::Label * _labelCubeCount
 
cocos2d::MoveTo * _moveAction
 
cocos2d::OBB _obbt
 
cocos2d::OBB _obbtOri
 
cocos2d::DrawNode3D * _drawDebug
 
bool _hasCollider
 
std::set< int > _intersetList
 
- 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
 

详细描述

在文件 Sprite3DTest.h346 行定义.

构造及析构函数说明

◆ Sprite3DWithOBBPerformanceTest()

Sprite3DWithOBBPerformanceTest::Sprite3DWithOBBPerformanceTest ( )

在文件 Sprite3DTest.cpp1414 行定义.

1415{
1416 auto listener = EventListenerTouchAllAtOnce::create();
1417 listener->onTouchesBegan = CC_CALLBACK_2(Sprite3DWithOBBPerformanceTest::onTouchesBegan, this);
1418 listener->onTouchesEnded = CC_CALLBACK_2(Sprite3DWithOBBPerformanceTest::onTouchesEnded, this);
1419 listener->onTouchesMoved = CC_CALLBACK_2(Sprite3DWithOBBPerformanceTest::onTouchesMoved, this);
1420 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
1421 auto s = Director::getInstance()->getWinSize();
1422 initDrawBox();
1423
1424 addNewSpriteWithCoords(Vec2(s.width / 2, s.height / 2));
1425 MenuItemFont::setFontName("fonts/arial.ttf");
1426 MenuItemFont::setFontSize(65);
1427 auto decrease = MenuItemFont::create(" - ", CC_CALLBACK_1(Sprite3DWithOBBPerformanceTest::delOBBCallback, this));
1428 decrease->setColor(Color3B(0, 200, 20));
1429 auto increase = MenuItemFont::create(" + ", CC_CALLBACK_1(Sprite3DWithOBBPerformanceTest::addOBBCallback, this));
1430 increase->setColor(Color3B(0, 200, 20));
1431
1432 auto menu = Menu::create(decrease, increase, nullptr);
1433 menu->alignItemsHorizontally();
1434 menu->setPosition(Vec2(s.width / 2, s.height - 65));
1435 addChild(menu, 1);
1436
1437 TTFConfig ttfCount("fonts/Marker Felt.ttf", 30);
1438 _labelCubeCount = Label::createWithTTF(ttfCount, "0 cubes");
1439 _labelCubeCount->setColor(Color3B(0, 200, 20));
1440 _labelCubeCount->setPosition(Vec2(s.width / 2, s.height - 90));
1441 addChild(_labelCubeCount);
1442 _hasCollider = false;
1443 addOBBCallback(nullptr);
1444 scheduleUpdate();
1445}
void onTouchesEnded(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
void delOBBCallback(cocos2d::Ref *sender)
cocos2d::Label * _labelCubeCount
Definition: Sprite3DTest.h:367
void addOBBCallback(cocos2d::Ref *sender)
void addNewSpriteWithCoords(cocos2d::Vec2 p)
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
void onTouchesBegan(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)

引用了 _hasCollider, _labelCubeCount, addNewSpriteWithCoords(), addOBBCallback(), delOBBCallback(), initDrawBox(), onTouchesBegan(), onTouchesEnded() , 以及 onTouchesMoved().

+ 函数调用图:

成员函数说明

◆ addNewOBBWithCoords()

void Sprite3DWithOBBPerformanceTest::addNewOBBWithCoords ( cocos2d::Vec2  p)

在文件 Sprite3DTest.cpp1454 行定义.

1455{
1456 Vec3 extents = Vec3(10, 10, 10);
1457 AABB aabb(-extents, extents);
1458 auto obb = OBB(aabb);
1459 obb._center = Vec3(p.x, p.y, 0);
1460 _obb.push_back(obb);
1461}
std::vector< cocos2d::OBB > _obb
Definition: Sprite3DTest.h:365

引用了 _obb.

◆ addNewSpriteWithCoords()

void Sprite3DWithOBBPerformanceTest::addNewSpriteWithCoords ( cocos2d::Vec2  p)

在文件 Sprite3DTest.cpp1544 行定义.

1545{
1546 std::string fileName = "Sprite3DTest/tortoise.c3b";
1547 auto sprite = Sprite3D::create(fileName);
1548 AABB aabb = sprite->getAABB();
1549 _obbt = OBB(aabb);
1550 _obbtOri = _obbt;
1551
1552 sprite->setScale(0.1f);
1553 auto s = Director::getInstance()->getWinSize();
1554 sprite->setPosition(Vec2(s.width * 4.f / 5.f, s.height / 2.f));
1555 addChild(sprite);
1556 _sprite = sprite;
1557 auto animation = Animation3D::create(fileName);
1558 if (animation)
1559 {
1560 auto animate = Animate3D::create(animation, 0.f, 1.933f);
1561 sprite->runAction(RepeatForever::create(animate));
1562 }
1563
1564 _moveAction = MoveTo::create(4.f, Vec2(s.width / 5.f, s.height / 2.f));
1565 _moveAction->retain();
1566 auto seq = Sequence::create(_moveAction, CallFunc::create(CC_CALLBACK_0(Sprite3DWithOBBPerformanceTest::reachEndCallBack, this)), nullptr);
1567 seq->setTag(100);
1568 sprite->runAction(seq);
1569
1570
1571
1573 addChild(_drawDebug);
1574}
static cocos2d::DrawNode3D * create()
Definition: DrawNode3D.cpp:42
cocos2d::DrawNode3D * _drawDebug
Definition: Sprite3DTest.h:371
cocos2d::MoveTo * _moveAction
Definition: Sprite3DTest.h:368
cocos2d::Sprite3D * _sprite
Definition: Sprite3DTest.h:364

引用了 _drawDebug, _moveAction, _obbt, _obbtOri, _sprite, DrawNode3D::create() , 以及 reachEndCallBack().

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ addOBBCallback()

void Sprite3DWithOBBPerformanceTest::addOBBCallback ( cocos2d::Ref *  sender)

在文件 Sprite3DTest.cpp1590 行定义.

1591{
1592 addOBBWithCount(10);
1593}

引用了 addOBBWithCount().

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ addOBBWithCount()

void Sprite3DWithOBBPerformanceTest::addOBBWithCount ( float  value)

在文件 Sprite3DTest.cpp1595 行定义.

1596{
1597 for (int i = 0; i < value; i++)
1598 {
1599 Vec2 randompos = Vec2(CCRANDOM_0_1() * Director::getInstance()->getWinSize().width, CCRANDOM_0_1() * Director::getInstance()->getWinSize().height);
1600 Vec3 extents = Vec3(10, 10, 10);
1601 AABB aabb(-extents, extents);
1602 auto obb = OBB(aabb);
1603 obb._center = Vec3(randompos.x, randompos.y, 0);
1604 _obb.push_back(obb);
1605 }
1606}

引用了 _obb.

被这些函数引用 addOBBCallback().

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

◆ calculateRayByLocationInView()

void Sprite3DWithOBBPerformanceTest::calculateRayByLocationInView ( cocos2d::Ray *  ray,
const cocos2d::Vec2 &  location 
)
protected

在文件 Sprite3DTest.cpp1646 行定义.

1647{
1648 auto dir = Director::getInstance();
1649 auto view = dir->getWinSize();
1650 auto mat = dir->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
1651
1652 Vec3 src = Vec3(location.x, location.y, -1);
1653 Vec3 nearPoint;
1654 unproject(mat, &view, &src, &nearPoint);
1655
1656 src = Vec3(location.x, location.y, 1);
1657 Vec3 farPoint;
1658 unproject(mat, &view, &src, &farPoint);
1659
1660 Vec3 direction;
1661 Vec3::subtract(farPoint, nearPoint, &direction);
1662 direction.normalize();
1663
1664 ray->_origin = nearPoint;
1665 ray->_direction = direction;
1666}
void unproject(const cocos2d::Mat4 &viewProjection, const cocos2d::Size *viewport, cocos2d::Vec3 *src, cocos2d::Vec3 *dst)

引用了 unproject().

被这些函数引用 onTouchesBegan().

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

◆ CREATE_FUNC()

Sprite3DWithOBBPerformanceTest::CREATE_FUNC ( Sprite3DWithOBBPerformanceTest  )

◆ delOBBCallback()

void Sprite3DWithOBBPerformanceTest::delOBBCallback ( cocos2d::Ref *  sender)

在文件 Sprite3DTest.cpp1608 行定义.

1609{
1610 delOBBWithCount(10);
1611}

引用了 delOBBWithCount().

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ delOBBWithCount()

void Sprite3DWithOBBPerformanceTest::delOBBWithCount ( float  value)

在文件 Sprite3DTest.cpp1613 行定义.

1614{
1615 if (_obb.size() >= 10)
1616 {
1617 _obb.erase(_obb.begin(), _obb.begin() + value);
1618 _drawOBB->clear();
1619 }
1620 else
1621 return;
1622}
cocos2d::DrawNode3D * _drawOBB
Definition: Sprite3DTest.h:366

引用了 _drawOBB , 以及 _obb.

被这些函数引用 delOBBCallback().

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

◆ initDrawBox()

void Sprite3DWithOBBPerformanceTest::initDrawBox ( )
protected

在文件 Sprite3DTest.cpp1538 行定义.

1539{
1541 addChild(_drawOBB);
1542}

引用了 _drawOBB , 以及 DrawNode3D::create().

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ onTouchesBegan()

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

在文件 Sprite3DTest.cpp1463 行定义.

1464{
1465 for (const auto& touch : touches)
1466 {
1467 auto location = touch->getLocationInView();
1468 auto obbSize = _obb.size();
1469 if (obbSize)
1470 {
1471 _intersetList.clear();
1472 Ray ray;
1473 calculateRayByLocationInView(&ray, location);
1474 for (decltype(obbSize) i = 0; i < obbSize; i++)
1475 {
1476 if (ray.intersects(_obb[i]))
1477 {
1478 _intersetList.insert((int)i);
1479 return;
1480 }
1481 }
1482 }
1483 }
1484}
void calculateRayByLocationInView(cocos2d::Ray *ray, const cocos2d::Vec2 &location)

引用了 _intersetList, _obb , 以及 calculateRayByLocationInView().

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ onTouchesEnded()

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

在文件 Sprite3DTest.cpp1486 行定义.

1487{
1488
1489}

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ onTouchesMoved()

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

在文件 Sprite3DTest.cpp1491 行定义.

1492{
1493 for (const auto& touch : touches)
1494 {
1495 auto location = touch->getLocation();
1496 auto obbSize = _obb.size();
1497
1498 for (decltype(obbSize) i = 0; i < obbSize; i++)
1499 {
1500 if (_intersetList.find((int)i) != _intersetList.end())
1501 _obb[i]._center = Vec3(location.x, location.y, 0);
1502 }
1503 }
1504}

引用了 _intersetList , 以及 _obb.

被这些函数引用 Sprite3DWithOBBPerformanceTest().

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

◆ reachEndCallBack()

void Sprite3DWithOBBPerformanceTest::reachEndCallBack ( )
protected

在文件 Sprite3DTest.cpp1576 行定义.

1577{
1578 auto s = Director::getInstance()->getWinSize();
1579 _sprite->stopActionByTag(100);
1580 auto inverse = MoveTo::create(4.f, Vec2(s.width - _sprite->getPositionX(), s.height / 2.f));
1581 inverse->retain();
1582 _moveAction->release();
1583 _moveAction = inverse;
1584 auto rot = RotateBy::create(1.0f, Vec3(0.f, 180.f, 0.f));
1585 auto seq = Sequence::create(rot, _moveAction, CallFunc::create(CC_CALLBACK_0(Sprite3DWithOBBPerformanceTest::reachEndCallBack, this)), nullptr);
1586 seq->setTag(100);
1587 _sprite->runAction(seq);
1588}

引用了 _moveAction, _sprite , 以及 reachEndCallBack().

被这些函数引用 addNewSpriteWithCoords() , 以及 reachEndCallBack().

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

◆ subtitle()

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

重载 TestCase .

在文件 Sprite3DTest.cpp1450 行定义.

1451{
1452 return "";
1453}

◆ title()

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

重载 Sprite3DTestDemo .

在文件 Sprite3DTest.cpp1446 行定义.

1447{
1448 return "OBB Collision Performance Test";
1449}

◆ unproject()

void Sprite3DWithOBBPerformanceTest::unproject ( const cocos2d::Mat4 &  viewProjection,
const cocos2d::Size *  viewport,
cocos2d::Vec3 *  src,
cocos2d::Vec3 *  dst 
)
protected

在文件 Sprite3DTest.cpp1623 行定义.

1624{
1625 assert(dst);
1626
1627 assert(viewport->width != 0.0f && viewport->height != 0.0f);
1628 Vec4 screen(src->x / viewport->width, ((viewport->height - src->y)) / viewport->height, src->z, 1.0f);
1629
1630 screen.x = screen.x * 2.0f - 1.0f;
1631 screen.y = screen.y * 2.0f - 1.0f;
1632 screen.z = screen.z * 2.0f - 1.0f;
1633
1634 viewProjection.getInversed().transformVector(screen, &screen);
1635
1636 if (screen.w != 0.0f)
1637 {
1638 screen.x /= screen.w;
1639 screen.y /= screen.w;
1640 screen.z /= screen.w;
1641 }
1642
1643 dst->set(screen.x, screen.y, screen.z);
1644}

被这些函数引用 calculateRayByLocationInView().

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

◆ update()

void Sprite3DWithOBBPerformanceTest::update ( float  dt)
overridevirtual

在文件 Sprite3DTest.cpp1506 行定义.

1507{
1508 char szText[16];
1509 sprintf(szText, "%lu cubes", static_cast<unsigned long>(_obb.size()));
1510 _labelCubeCount->setString(szText);
1511
1512 if (_drawDebug)
1513 {
1514 _drawDebug->clear();
1515
1516 Mat4 mat = _sprite->getNodeToWorldTransform();
1517
1518 _obbt = _obbtOri;
1519 _obbt.transform(mat);
1520
1521 Vec3 corners[8] = {};
1522 _obbt.getCorners(corners);
1523 _drawDebug->drawCube(corners, Color4F(0, 0, 1, 1));
1524 }
1525 if (_obb.size() > 0)
1526 {
1527 _drawOBB->clear();
1528 auto obbSize = _obb.size();
1529 for (decltype(obbSize) i = 0; i < obbSize; i++)
1530 {
1531 Vec3 corners[8] = {};
1532 _obb[i].getCorners(corners);
1533 _drawOBB->drawCube(corners, _obbt.intersects(_obb[i]) ? Color4F(1, 0, 0, 1) : Color4F(0, 1, 0, 1));
1534 }
1535 }
1536}

引用了 _drawDebug, _drawOBB, _labelCubeCount, _obb, _obbt, _obbtOri , 以及 _sprite.

类成员变量说明

◆ _drawDebug

cocos2d::DrawNode3D* Sprite3DWithOBBPerformanceTest::_drawDebug
protected

在文件 Sprite3DTest.h371 行定义.

被这些函数引用 addNewSpriteWithCoords() , 以及 update().

◆ _drawOBB

cocos2d::DrawNode3D* Sprite3DWithOBBPerformanceTest::_drawOBB
protected

在文件 Sprite3DTest.h366 行定义.

被这些函数引用 delOBBWithCount(), initDrawBox() , 以及 update().

◆ _hasCollider

bool Sprite3DWithOBBPerformanceTest::_hasCollider
protected

在文件 Sprite3DTest.h372 行定义.

被这些函数引用 Sprite3DWithOBBPerformanceTest().

◆ _intersetList

std::set<int> Sprite3DWithOBBPerformanceTest::_intersetList
protected

在文件 Sprite3DTest.h373 行定义.

被这些函数引用 onTouchesBegan() , 以及 onTouchesMoved().

◆ _labelCubeCount

cocos2d::Label* Sprite3DWithOBBPerformanceTest::_labelCubeCount
protected

在文件 Sprite3DTest.h367 行定义.

被这些函数引用 Sprite3DWithOBBPerformanceTest() , 以及 update().

◆ _moveAction

cocos2d::MoveTo* Sprite3DWithOBBPerformanceTest::_moveAction
protected

在文件 Sprite3DTest.h368 行定义.

被这些函数引用 addNewSpriteWithCoords() , 以及 reachEndCallBack().

◆ _obb

std::vector<cocos2d::OBB> Sprite3DWithOBBPerformanceTest::_obb
protected

◆ _obbt

cocos2d::OBB Sprite3DWithOBBPerformanceTest::_obbt
protected

在文件 Sprite3DTest.h369 行定义.

被这些函数引用 addNewSpriteWithCoords() , 以及 update().

◆ _obbtOri

cocos2d::OBB Sprite3DWithOBBPerformanceTest::_obbtOri
protected

在文件 Sprite3DTest.h370 行定义.

被这些函数引用 addNewSpriteWithCoords() , 以及 update().

◆ _sprite

cocos2d::Sprite3D* Sprite3DWithOBBPerformanceTest::_sprite
protected

在文件 Sprite3DTest.h364 行定义.

被这些函数引用 addNewSpriteWithCoords(), reachEndCallBack() , 以及 update().


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