void ReinInfiniteScroller::scrollViewDidScroll(extension::ScrollView *view) { float sectionSize = imageAry.size() * itemSize.width; log("infinite offset , pointx before:%f,%f",infiniteScrollView->getContentOffset().x,beforePointX); if (beforePointX != infiniteScrollView->getContentOffset().x) { if (infiniteScrollView->getContentOffset().x < 0) { if (infiniteScrollView->getContentOffset().x >= (-sectionSize + sectionSize / 2)) { view->setContentOffset(Point(-sectionSize * 2 +sectionSize / 2, 0)); } else if (view->getContentOffset().x <= (-sectionSize * 3 - sectionSize / 2)) { view->setContentOffset(Point(-sectionSize * 2 - sectionSize / 2, 0)); } reloadView(view->getContentOffset().x - getLayoutSize().width / 2); } else { view->setContentOffset(Point(-sectionSize * 2 + sectionSize / 2, 0)); } if (!infiniteScrollView->isDragging()) { if (isFirstDrag) { beforePointX = -currSprite->getPosition().x + getLayoutSize().width / 2; view->setContentOffset(Point(beforePointX, 0)); if (_infiniteEventListener && _infiniteEventSelector) { (_infiniteEventListener->*_infiniteEventSelector)(currSprite); } } isFirstDrag = true; } } log("view->getContentOffset().x = %f",view->getContentOffset().x); beforePointX = view->getContentOffset().x; }
void ReinInfiniteScroller::initInfiniteScrollView(const Size& chipSize) { isFirstDrag = false; beforePointX = 0.0f; infiniteScrollView = extension::ScrollView::create(getLayoutSize()); infiniteScrollView->retain(); infiniteScrollView->setPosition(Point(0, 0)); infiniteScrollView->setBounceable(false); infiniteScrollView->setDelegate(this); addChild(infiniteScrollView); if (imageAry.size() > 0) { itemSize = chipSize; } if (imageAry.size() > 0) { for (int i = 0; i < (imageAry.size() * 5); i++) { Sprite* sprite = Sprite::create(imageAry.at(i % imageAry.size())); sprite->setTag(i % imageAry.size()); sprite->setPosition(Point(i * itemSize.width + itemSize.width / 2, getLayoutSize().height / 2)); imageStore.push_back(sprite); infiniteScrollView->addChild(sprite); } } infiniteScrollView->setContentSize(Size(imageAry.size() * 5 * itemSize.width, getLayoutSize().height)); float viewMiddle = imageAry.size() * 2 * itemSize.width; infiniteScrollView->setContentOffset(Point(-viewMiddle , 0)); }
// on "init" you need to initialize your instance bool GameMenu::init() { ////////////////////////////// // 1. super init first if (!Layer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto label = Label::createWithTTF("Welcome To iBreaker", "fonts/Marker Felt.ttf", 24); label->setColor(Color3B(0, 0, 0)); // position the label on the center of the screen label->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - label->getContentSize().height - 10)); // add the label as a child to this layer this->addChild(label, 1); auto start_button = ui::Button::create("button_normal.png", "button_clicked.png", "button_disabled.png"); auto start_label = Label::createWithTTF("START GAME", "fonts/Marker Felt.ttf", 24); start_label->setColor(Color3B(0, 0, 0)); start_label->setPosition(Vec2(start_button->getLayoutSize().width / 2, start_button->getLayoutSize().height / 2)); start_button->addChild(start_label); start_button->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 5 * 4 -50)); start_button->addTouchEventListener([&](Ref* sender, ui::Widget::TouchEventType type) { int n = 0; switch (type) { case ui::Widget::TouchEventType::BEGAN: break; case ui::Widget::TouchEventType::ENDED: n = 1; break; default: break; } if (n == 1) { auto director = Director::getInstance(); auto scene = HelloWorld::createScene(); // Transition Fade //director->replaceScene(TransitionFade::create(0.5, scene, Color3B(0, 255, 255))); // FlipX //director->replaceScene(TransitionFlipX::create(2, scene)); // Transition Slide In director->replaceScene(TransitionSlideInT::create(1, scene)); // run //director->replaceScene(scene); } }); this->addChild(start_button, 1); auto quit_button = ui::Button::create("button_normal.png", "button_clicked.png", "button_disabled.png"); auto quit_label = Label::createWithTTF("QUIT", "fonts/Marker Felt.ttf", 24); quit_label->setColor(Color3B(0, 0, 0)); quit_label->setPosition(Vec2(quit_button->getLayoutSize().width / 2, quit_button->getLayoutSize().height / 2)); quit_button->addChild(quit_label); quit_button->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 5 * 2 - 50)); quit_button->addTouchEventListener([&](Ref* sender, ui::Widget::TouchEventType type) { int n = 0; switch (type) { case ui::Widget::TouchEventType::BEGAN: break; case ui::Widget::TouchEventType::ENDED: n = 1; break; default: break; } if (n == 1) { Director::getInstance()->end(); } }); this->addChild(quit_button); drawBackground(); return true; }