cocos2dx运行时的错误怎么解决
//helloworld.cpp
#include "HelloWorldScene.h"
#include"player.h"
#define PI 3.1415926
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("player.plist", "player.png");
auto sprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("0_run_0.png"));
sprite->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2));
sprite->setTag(123);
this->addChild(sprite);
moveBy = nullptr;
auto listener = EventListenerTouchOneByOne::create();//创建一个触摸监听(单点触摸)
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
m_bIsRunning = false;
return true;
}
bool HelloWorld::onTouchBegan(Touch *pTouch, Event *pEvent)
{
m_pTouchPoint = pTouch->getLocation();
return true;//返回true表示接收触摸事件
}
void HelloWorld::onTouchMoved(Touch* pTouch, Event *event)
{
if (m_bIsRunning == false && sqrt((pTouch->getDelta().x*pTouch->getDelta().x) + (pTouch->getDelta().y*pTouch->getDelta().y)) > 18)
{
auto sp = (Sprite*)this->getChildByTag(123);
m_bIsRunning = true;
//一象限
if (pTouch->getLocation().x > m_pTouchPoint.x&&pTouch->getLocation().y > m_pTouchPoint.y)
{
if ((pTouch->getDelta().y) / (pTouch->getDelta().x) < tan(PI / 8))
{
if (sp->isFlippedX() == false)
{
sp->setFlippedX(true);
}
sp->runAction(Player::getInstance()->runleft);
}
else if ((pTouch->getDelta().y) / (pTouch->getDelta().x) > tan(PI / 8) && ((pTouch->getDelta().y) / (pTouch->getDelta().x)< tan(0.75*PI)))
{
if (sp->isFlippedX() == false)
{
sp->setFlippedX(true);
}
sp->runAction(Player::getInstance()->runleftup);
}
else
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->runup);
}
}
////二像限
if (pTouch->getLocation().x < m_pTouchPoint.x&&pTouch->getLocation().y > m_pTouchPoint.y)
{
if ((pTouch->getDelta().y) / (pTouch->getDelta().x)< tan(PI / 8))
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->runleft);
}
else if (((pTouch->getDelta().y) / (pTouch->getDelta().x) > tan(PI / 8)) && (abs((pTouch->getDelta().y) / (pTouch->getDelta().x)) < tan(0.75*PI)))
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->runleftup);
}
else
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->runup);
}
}
////三像限
if (pTouch->getLocation().x < m_pTouchPoint.x&&pTouch->getLocation().y < m_pTouchPoint.y)
{
if ((pTouch->getDelta().y) / (pTouch->getDelta().x) < tan(PI / 8))
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->runleft);
}
else if (((pTouch->getDelta().y) / (pTouch->getDelta().x)> tan(PI / 8)) && ((pTouch->getDelta().y) / (pTouch->getDelta().x) < tan(0.75*PI)))
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->runleftdown);
}
else
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->rundown);
} //m_pSp->runAction(g_AnimateM[0]->rundown);
}
////四像限
if (pTouch->getLocation().x > m_pTouchPoint.x&&pTouch->getLocation().y < m_pTouchPoint.y)
{
if ((pTouch->getDelta().y) / (pTouch->getDelta().x) < tan(PI / 8))
{
if (sp->isFlippedX() == false)
{
sp->setFlippedX(true);
}
sp->runAction(Player::getInstance()->runleft);
}
else if (((pTouch->getDelta().y) / (pTouch->getDelta().x) > tan(PI / 8)) && (abs((pTouch->getDelta().y) / (pTouch->getDelta().x)) < tan(0.75*PI)))
{
if (sp->isFlippedX() == false)
{
sp->setFlippedX(true);
}
sp->runAction(Player::getInstance()->runleftdown);
}
else
{
if (sp->isFlippedX() == true)
{
sp->setFlippedX(false);
}
sp->runAction(Player::getInstance()->rundown);
}
}
}
}
void HelloWorld::onTouchEnded(Touch* pTouch, Event *event)
{
m_bIsRunning = false;
auto sp= (Sprite*)this->getChildByTag(123);
sp->stopAllActions();
}