实现文本框到处弹的效果
2016-04-10 00:19
288 查看
实现将一个hello world 的label碰到边界就弹回的效果。
#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); label->setTag(123); // 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" auto sprite = Sprite::create("HelloWorld.png"); // position the sprite on the center of the screen sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(sprite, 0); this->scheduleUpdate(); return true; } void HelloWorld::menuCloseCallback(Ref* pSender) { unscheduleUpdate(); Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif } void HelloWorld::update(float dt) { auto label = this->getChildByTag(123); Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); //方向,0右下,1左下,2左上,3右上 static int dir = 0; if (0 == dir) { if (label->getPositionX() == visibleSize.width) dir = 1; if (label->getPositionY() == origin.y) dir = 3; if (label->getPositionX() == visibleSize.width && label->getPositionY() == origin.y) dir = 2; } if (1 == dir) { if (label->getPositionX() == origin.x) dir = 0; if (label->getPositionY() == origin.y) dir = 2; if (label->getPositionX() == origin.x && label->getPositionY() == origin.y) dir = 3; } if (2 == dir) { if (label->getPositionX() == origin.x) dir = 3; if (label->getPositionY() == visibleSize.height) dir = 1; if (label->getPositionX() == origin.x && label->getPositionY() == visibleSize.height) dir = 0; } if (3 == dir) { if (label->getPositionX() == visibleSize.width) dir = 2; if (label->getPositionY() == visibleSize.height) dir = 0; if (label->getPositionX() == visibleSize.width && label->getPositionY() == visibleSize.height) dir = 1; } // CCLOG("%f %f\n", label->getPositionX(), label->getPositionY()); //右下 if (0 == dir) label->setPosition(label->getPosition() + Vec2(1, -1)); //左下 if (1 == dir) label->setPosition(label->getPosition() + Vec2(-1, -1)); //左上 if (2 == dir) label->setPosition(label->getPosition() + Vec2(-1, 1)); //右上 if (3 == dir) label->setPosition(label->getPosition() + Vec2(1, 1)); }
相关文章推荐
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- 使用C++进行Cocos2d-x游戏开发入门过程中的要点解析
- Cocos2d-x的内存管理总结
- Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决