#pragma once#include "cocos2d.h"#include "ShopScene.h"using namespace cocos2d;class ChooseScene : public Layer {public: static Scene* createScene(); virtual bool init(); voID menuCloseCallback(Ref* pSender);CREATE_FUNC(ChooseScene);public: bool ontouchBegan(touch* touch,Event* event); voID ontouchmoved(touch* touch,Event* event); voID ontouchended(touch* touch,Event* event); Point diff_2; Point diff_1; float bg_wIDth_max; float bg_wIDth_min; Sprite* cocosImage;};cpp#include "ChooseScene.h"USING_NS_CC;Scene* ChooseScene::createScene(){ auto scene = Scene::create(); auto layer = ChooseScene::create(); scene->addChild(layer);return scene;}bool ChooseScene::init(){ if ( !Layer::init() ) {return false;} Size visibleSize = Director::getInstance()->getVisibleSize(); Point origin = Director::getInstance()->getVisibleOrigin(); bg_wIDth_max = 6500; // 背景全然出现 最大X bg_wIDth_min = 1024; // 最小X background_init(); return true;}voID ChooseScene::background_init(){ cocosImage = Sprite::create("ChooseScene/map.png"); cocosImage->setAnchorPoint(Point(1,0)); ///锚点 1,0 图片的右下角 cocosImage->setposition(Point(1024,0)); // 屏幕是 1024 768 锚点是1,0 所以所有显示在屏幕上 x 位置 是1024 this->addChild(cocosImage,1,1); auto Listener_1 = EventListenertouchOneByOne::create(); //加入监听事件 Listener_1->setSwallowtouches(true); Listener_1->ontouchBegan = CC_CALLBACK_2(ChooseScene::ontouchBegan,this); Listener_1->ontouchmoved = CC_CALLBACK_2(ChooseScene::ontouchmoved,this); Listener_1->ontouchended = CC_CALLBACK_2(ChooseScene::ontouchended,this); _eventdispatcher->addEventListenerWithSceneGraPHPriority(Listener_1,this);}bool ChooseScene::ontouchBegan(touch* touch,Event* event) // 假设有触摸范围的话 能够再这里加入一个{ // auto beginPoint = touch->getLocation(); // if (touch_bg.containsPoint(beginPoint)) /////touch_bg 是point // { // return true; // } return true;}voID ChooseScene::ontouchmoved(touch* touch,Event* event){ if (cocosImage->getpositionX() >= bg_wIDth_min && cocosImage->getpositionX() <= bg_wIDth_max) //推断 是不是在 规定的范围内 { diff_2 = touch->getDelta(); auto currentPos = cocosImage->getposition(); cocosImage->setposition(currentPos.x + diff_2.x,currentPos.y); } if (cocosImage->getpositionX() > bg_wIDth_max) // 最左边 //当移动到最左边的时候 返回最大范围 { cocosImage->setposition(bg_wIDth_max,cocosImage->getpositionY()); } if (cocosImage->getpositionX() < bg_wIDth_min) /// 最右边 同上 { cocosImage->setposition(bg_wIDth_min,cocosImage->getpositionY()); }}voID ChooseScene::ontouchended(touch* touch,Event* event){ if (diff_1.x == diff_2.x) //推断 上次触摸点与这次触摸点 是否不同 假设同样 地图不进行移动 { return; } diff_1 = diff_2; //保留这次移动參数 float pm = 0; if (diff_1.y > 0) { pm = 1; } else { pm = -1; } if (cocosImage->getpositionX() >= bg_wIDth_min - pm * 180 && cocosImage->getpositionX() <= bg_wIDth_max - pm * 180) /// 滑动边界推断 最大范围 { if (abs(diff_1.x)>=30) { if (diff_1.x >0) { auto move_x = Moveto::create(0.8f,Point(cocosImage->getpositionX() + 180,cocosImage->getpositionY())); cocosImage->runAction(move_x); } else { auto move_x = Moveto::create(0.8f,Point(cocosImage->getpositionX() - 180,cocosImage->getpositionY())); cocosImage->runAction(move_x); } } } if (cocosImage->getpositionX() >= bg_wIDth_min - pm * 50 && cocosImage->getpositionX() <= bg_wIDth_max - pm * 50) //边界推断 最小距离 { if (abs(diff_1.x) < 30) { if (diff_1.x >0) { auto move_x = Moveto::create(0.5,Point(cocosImage->getpositionX() + 50,cocosImage->getpositionY())); cocosImage->runAction(move_x); } else { auto move_x = Moveto::create(0.5,Point(cocosImage->getpositionX() - 50,cocosImage->getpositionY())); cocosImage->runAction(move_x); } } }}
2.不会有d动效果,拖动到规定范围之后。将不能拖动。
所以 这段代码实现了 在没有出规定范围的时候 有滑动效果。
而且不会出现范围以外的图片地区。
移动的时候 使用setpostion 移动结束后 添加一个动作?
。起到了一个缓冲的惯性。
这个横屏实例。竖屏 參照这个 改动參数就可以。
总结以上是内存溢出为你收集整理的cocos2d-x 3.0 游戏关卡滑动 d动 不会出现黑边效果全部内容,希望文章能够帮你解决cocos2d-x 3.0 游戏关卡滑动 d动 不会出现黑边效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)