cocos2d-x 3.x 触摸程序 示例

    xiaoxiao2021-08-25  89

    头文件

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_NS_CC; class HelloWorld : public cocos2d::Layer { public: static cocos2d::Scene* createScene(); virtual bool init(); // a selector callback void menuCloseCallback(cocos2d::Ref* pSender); // implement the "static create()" method manually CREATE_FUNC(HelloWorld); //头文件声明 protected: **bool onTouchBegan(Touch *touch, Event *event); void onTouchEnded(Touch* touch, Event* event); void setListener(); Sprite* P1sprite; Sprite* P2sprite;** }; #endif // __HELLOWORLD_SCENE_H__

    CPP

    #include "HelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { // // 1. super init first if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); / // 2. add a menu item with "X" image, which is clicked to quit the program // you may modify it. // add a "close" icon to exit the progress. it's an autorelease object auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2)); // create menu, it's an autorelease object auto menu = Menu::create(closeItem, NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu, 1); / // 3. add your codes below... // add a label shows "Hello World" // create and initialize a label auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24); // position the label on the center of the screen label->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height)); // add the label as a child to this layer this->addChild(label, 1); // add "HelloWorld" splash screen" P1sprite = Sprite::create("CloseNormal.png"); // position the sprite on the center of the screen P1sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(P1sprite, 0); P2sprite = Sprite::create("CloseSelected.png"); //this->setPosition((this->getParent()->getPosition())+ccp(100,100)); P1sprite->addChild(P2sprite); P2sprite->setVisible(false); **//调用监听函数** setListener(); return true; } void HelloWorld::menuCloseCallback(Ref* pSender) { Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif } **//监听函数实现** void HelloWorld::setListener() { auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, P1sprite); } bool HelloWorld::onTouchBegan(Touch *touch, Event *event) { return true; } **//触摸函数实现** void HelloWorld::onTouchEnded(Touch* touch, Event* event) { auto target = static_cast<Sprite*>(event->getCurrentTarget()); Point locationInNode = target->convertTouchToNodeSpace(touch); Size size = target->getContentSize(); Rect rect = Rect(0, 0, size.width, size.height); if (rect.containsPoint(locationInNode)) { P2sprite->setPosition(this->getPosition() + ccp(random(-240,240), random(-160,160))); P2sprite->setVisible(true); log("Is contains point random =%d",random(10,50)); } else{ log("Not contains point"); } }
    转载请注明原文地址: https://ju.6miu.com/read-677115.html

    最新回复(0)