| 106 | } |
| 107 | |
| 108 | bool BoomScrollLayer::init(std::vector<ax::Layer*> layers, int currentPage) |
| 109 | { |
| 110 | if (!Layer::init()) return false; |
| 111 | |
| 112 | _totalPages = layers.size(); |
| 113 | |
| 114 | currentPage = std::clamp(currentPage, 0, _totalPages); |
| 115 | |
| 116 | _layers = layers; |
| 117 | _currentPage = currentPage; |
| 118 | _internalLayer = Layer::create(); |
| 119 | _internalLayer->setAnchorPoint(Vec2::ANCHOR_MIDDLE); |
| 120 | auto dir = Director::getInstance(); |
| 121 | const auto& winSize = dir->getWinSize(); |
| 122 | if (_internalLayer->getChildrenCount() < _totalPages) |
| 123 | { |
| 124 | int i = 0; |
| 125 | for (auto l : _layers) |
| 126 | { |
| 127 | if (!l) return false; |
| 128 | // l->setPositionX(winSize.width * i); |
| 129 | // _internalLayer->addChild(l); |
| 130 | l->retain(); |
| 131 | i++; |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | _internalLayer->addChild(_layers[currentPage]); |
| 136 | _layers[currentPage]->setName("1"); |
| 137 | _layers[currentPage]->release(); |
| 138 | |
| 139 | _leftPage = currentPage - 1 < 0 ? _layers.size() - 1 : currentPage - 1; |
| 140 | _internalLayer->addChild(_layers[_leftPage]); |
| 141 | _layers[_leftPage]->setPositionX(winSize.width * -1.f); |
| 142 | _layers[_leftPage]->release(); |
| 143 | |
| 144 | _rightPage = currentPage + 1 >= _layers.size() ? 0 : currentPage + 1; |
| 145 | _internalLayer->addChild(_layers[_rightPage]); |
| 146 | _layers[_rightPage]->setPositionX(winSize.width); |
| 147 | _layers[_rightPage]->release(); |
| 148 | |
| 149 | //selectPage(currentPage); |
| 150 | |
| 151 | addChild(_internalLayer); |
| 152 | |
| 153 | // auto listener = EventListenerTouchOneByOne::create(); |
| 154 | |
| 155 | // listener->setEnabled(true); |
| 156 | // listener->setSwallowTouches(true); |
| 157 | |
| 158 | //trigger when you start touch |
| 159 | |
| 160 | // listener->onTouchBegan = AX_CALLBACK_2(BoomScrollLayer::onTouchBegan, this); |
| 161 | // listener->onTouchEnded = AX_CALLBACK_2(BoomScrollLayer::onTouchEnded, this); |
| 162 | // listener->onTouchMoved = AX_CALLBACK_2(BoomScrollLayer::onTouchMoved, this); |
| 163 | |
| 164 | // dir->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); |
| 165 | |