axmol/samples/Cpp/TestCpp/Classes/ClickAndMoveTest/ClickAndMoveTest.cpp

63 lines
1.5 KiB
C++
Raw Normal View History

2010-11-18 14:50:28 +08:00
#include "ClickAndMoveTest.h"
#include "../testResource.h"
2010-08-23 11:53:37 +08:00
enum
{
kTagSprite = 1,
2010-11-18 14:50:28 +08:00
};
void ClickAndMoveTestScene::runThisTest()
{
Layer* pLayer = new MainLayer();
2010-11-18 14:50:28 +08:00
pLayer->autorelease();
addChild(pLayer);
Director::sharedDirector()->replaceScene(this);
2010-11-18 14:50:28 +08:00
}
2010-08-23 11:53:37 +08:00
MainLayer::MainLayer()
{
setTouchEnabled(true);
Sprite* sprite = Sprite::create(s_pPathGrossini);
Layer* layer = LayerColor::create(Color4B(255,255,0,255));
addChild(layer, -1);
addChild(sprite, 0, kTagSprite);
sprite->setPosition( ccp(20,150) );
sprite->runAction( JumpTo::create(4, ccp(300,48), 100, 4) );
layer->runAction( RepeatForever::create(
Sequence::create(
FadeIn::create(1),
FadeOut::create(1),
NULL)
));
2010-11-18 14:50:28 +08:00
}
void MainLayer::ccTouchesEnded(Set *pTouches, Event *pEvent)
2010-08-23 11:53:37 +08:00
{
Touch* touch = (Touch*) pTouches->anyObject();
Point location = touch->getLocation();
2010-08-23 11:53:37 +08:00
Node* s = getChildByTag(kTagSprite);
s->stopAllActions();
s->runAction( MoveTo::create(1, ccp(location.x, location.y) ) );
float o = location.x - s->getPosition().x;
float a = location.y - s->getPosition().y;
float at = (float) CC_RADIANS_TO_DEGREES( atanf( o/a) );
if( a < 0 )
{
if( o < 0 )
at = 180 + fabs(at);
else
at = 180 - fabs(at);
}
s->runAction( RotateTo::create(1, at) );
2010-08-23 11:53:37 +08:00
}