//// ControlLayer.cpp// PocketNES//// Created by tianshuai on 7/26/15.////#include "ControlLayer.h"USING_NS_CC;keyState key;ControlLayer::ControlLayer(){isPressed = false;}ControlLayer::~ControlLayer(){}bool ControlLayer::init(){if(!Layer::init())return false;_visibleSize = Director::getInstance()->getVisibleSize();_origin = Director::getInstance()->getVisibleOrigin();auto touchListener = EventListenerTouchAllAtOnce::create();touchListener->onTouchesBegan = CC_CALLBACK_2(ControlLayer::onTouchesBegan, this);touchListener->onTouchesMoved = CC_CALLBACK_2(ControlLayer::onTouchesMoved, this);touchListener->onTouchesEnded = CC_CALLBACK_2(ControlLayer::onTouchesEnded, this);touchListener->onTouchesEnded = CC_CALLBACK_2(ControlLayer::onTouchesCancelled, this);_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);auto keyListener = EventListenerKeyboard::create();keyListener->onKeyPressed = CC_CALLBACK_2(ControlLayer::onKeyPressed, this);keyListener->onKeyReleased = CC_CALLBACK_2(ControlLayer::onKeyRelease, this);_eventDispatcher->addEventListenerWithSceneGraphPriority(keyListener, this);joystick_rect_set.clear();int control_pad_size = _visibleSize.height / 3;int button_size = control_pad_size/2.1;int number = 0;for (int y = 0; y < 2; ++y){for (int x = 0; x < 3; ++x, ++number){Rect button_rect(x * button_size, button_size * (1 - y),button_size, button_size);switch (number){case 0: // left{Sprite *left = Sprite::create("control/left_arrow.png");left->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2 );left->setScale(button_size/128.0);left->setOpacity(110);//left->setColor(Color3B(255,0,0));this->addChild(left);ButtonRect btinfo;btinfo.button = LEFT;btinfo.rect = button_rect;btinfo.spr = left;joystick_rect_set.push_back(btinfo);break;}case 1: // up{button_rect.origin.x = button_rect.origin.x;button_rect.origin.y = button_rect.origin.y + button_size;Sprite *up = Sprite::create("control/up_arrow.png");up->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2 );up->setScale(button_size/128.0);up->setOpacity(110);//up->setColor(Color3B(255,0,0));this->addChild(up);ButtonRect btinfo;btinfo.button = UP;btinfo.rect = button_rect;btinfo.spr = up;joystick_rect_set.push_back(btinfo);break;}case 2: // right{Sprite *right = Sprite::create("control/right_arrow.png");right->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2 );right->setScale(button_size/128.0);right->setOpacity(110);//right->setColor(Color3B(255,0,0));this->addChild(right);ButtonRect btinfo;btinfo.button = RIGHT;btinfo.rect = button_rect;btinfo.spr = right;joystick_rect_set.push_back(btinfo);break;}case 4: // down{Sprite *down = Sprite::create("control/down_arrow.png");down->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2 );down->setScale(button_size/128.0);down->setOpacity(110);//down->setColor(Color3B(255,0,0));this->addChild(down);ButtonRect btinfo;btinfo.button = DOWN;btinfo.rect = button_rect;btinfo.spr = down;joystick_rect_set.push_back(btinfo);break;}}}}{Rect button_rect(_visibleSize.width-2.5*button_size, 0,button_size, button_size);Sprite *B = Sprite::create("control/B.png");B->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2);B->setScale(button_size/128.0);B->setOpacity(110);//B->setColor(Color3B(255,0,0));this->addChild(B);Bbtinfo.button = Bbutton;Bbtinfo.rect = button_rect;Bbtinfo.spr = B;}{Rect button_rect(_visibleSize.width-1.2*button_size, button_size/1.1,button_size, button_size);Sprite *A = Sprite::create("control/A.png");A->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2);A->setScale(button_size/128.0);A->setOpacity(110);//A->setColor(Color3B(255,0,0));this->addChild(A);Abtinfo.button = Abutton;Abtinfo.rect = button_rect;Abtinfo.spr = A;}{Rect button_rect(_visibleSize.width - button_size, _visibleSize.height/2,button_size, button_size);Sprite *start = Sprite::create("control/start.png");start->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2);start->setScale(button_size/128.0);start->setOpacity(140);//start->setColor(Color3B(255,0,0));this->addChild(start);startbtinfo.button = START;startbtinfo.rect = button_rect;startbtinfo.spr = start;}{Rect button_rect(0, _visibleSize.height/2,button_size, button_size);Sprite *select = Sprite::create("control/select.png");select->setPosition(button_rect.origin.x + button_rect.size.width/2, button_rect.origin.y + button_rect.size.height/2);select->setScale(button_size/128.0);select->setOpacity(140);//select->setColor(Color3B(255,0,0));this->addChild(select);selectbtinfo.button = SELECT;selectbtinfo.rect = button_rect;selectbtinfo.spr = select;}return true;}void ControlLayer::onTouchesBegan(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event){Vec2 pt;int touchID;for ( auto &item: touches ){auto touch = item;pt = touch->getLocation();touchID = touch->getID();for(auto &btn : joystick_rect_set){if(btn.rect.containsPoint(pt) == true){JoystickID = touchID;isPressed = true;switch (btn.button){case UP:{key.isUp = true;btn.spr->runAction(FadeTo::create(0.2, 255));break;}case DOWN:key.isDown = true;btn.spr->runAction(FadeTo::create(0.2, 255));break;case LEFT:key.isLeft = true;btn.spr->runAction(FadeTo::create(0.2, 255));break;case RIGHT:key.isRight = true;btn.spr->runAction(FadeTo::create(0.2, 255));break;}}}if(Bbtinfo.rect.containsPoint(pt)){BbuttonID = touchID;key.isB = true;Bbtinfo.spr->runAction(FadeTo::create(0.2, 255));}if(Abtinfo.rect.containsPoint(pt)){AbuttonID = touchID;key.isA = true;Abtinfo.spr->runAction(FadeTo::create(0.2, 255));}if (startbtinfo.rect.containsPoint(pt)){StartbuttonID = touchID;key.isStart = true;startbtinfo.spr->runAction(FadeTo::create(0.2, 255));}if(selectbtinfo.rect.containsPoint(pt)){SelectbuttonID = touchID;key.isSelect = true;selectbtinfo.spr->runAction(FadeTo::create(0.2, 255));}}}void ControlLayer::onTouchesMoved(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event){Vec2 pt;for ( auto &item: touches ){auto touch = item;pt = touch->getLocation();if ( JoystickID == touch->getID() && isPressed ){for(auto &btn : joystick_rect_set){if(btn.rect.containsPoint(pt) == true){switch (btn.button){case UP:key.isDown = false;key.isLeft = false;key.isRight = false;key.isUp = true;for(auto &btn : joystick_rect_set){if(btn.button == UP)btn.spr->runAction(FadeTo::create(0.2, 255));elsebtn.spr->runAction(FadeTo::create(0.2, 80));}break;case DOWN:key.isDown = true;key.isLeft = false;key.isRight = false;key.isUp = false;for(auto &btn : joystick_rect_set){if(btn.button == DOWN)btn.spr->runAction(FadeTo::create(0.2, 255));elsebtn.spr->runAction(FadeTo::create(0.2, 80));}break;case LEFT:key.isDown = false;key.isLeft = true;key.isRight = false;key.isUp = false;for(auto &btn : joystick_rect_set){if(btn.button == LEFT)btn.spr->runAction(FadeTo::create(0.2, 255));elsebtn.spr->runAction(FadeTo::create(0.2, 80));}break;case RIGHT:key.isDown = false;key.isLeft = false;key.isRight = true;key.isUp = false;for(auto &btn : joystick_rect_set){if(btn.button == RIGHT)btn.spr->runAction(FadeTo::create(0.2, 255));elsebtn.spr->runAction(FadeTo::create(0.2, 80));}break;}}}}}}void ControlLayer::onTouchesEnded(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event){Vec2 pt;int touchID;for ( auto &item: touches ){auto touch = item;pt = touch->getLocation();touchID = touch->getID();if( JoystickID == touchID && isPressed ){key.isDown = false;key.isLeft = false;key.isRight = false;key.isUp = false;isPressed = false;for(auto &btn : joystick_rect_set){btn.spr->runAction(FadeTo::create(0.2, 80));}}if(BbuttonID == touchID){key.isB = false;Bbtinfo.spr->runAction(FadeTo::create(0.2, 80));}if (AbuttonID == touchID){key.isA = false;Abtinfo.spr->runAction(FadeTo::create(0.2, 80));}if(StartbuttonID == touchID){key.isStart = false;startbtinfo.spr->runAction(FadeTo::create(0.2, 100));}if(SelectbuttonID == touchID){key.isSelect = false;selectbtinfo.spr->runAction(FadeTo::create(0.2, 100));}}}void ControlLayer::onTouchesCancelled(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event){onTouchesEnded(touches, event);}void ControlLayer::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event){switch(keyCode){case EventKeyboard::KeyCode::KEY_RIGHT_SHIFT:{key.isSelect = true;break;}case EventKeyboard::KeyCode::KEY_KP_ENTER:{key.isStart = true;break;}case EventKeyboard::KeyCode::KEY_J:{key.isB = true;break;}case EventKeyboard::KeyCode::KEY_K:{key.isA = true;break;}case EventKeyboard::KeyCode::KEY_A:{key.isLeft = true;break;}case EventKeyboard::KeyCode::KEY_S:{key.isDown = true;break;}case EventKeyboard::KeyCode::KEY_D:{key.isRight = true;break;}case EventKeyboard::KeyCode::KEY_W:{key.isUp = true;break;}default:break;}}void ControlLayer::onKeyRelease(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event* event){switch(keyCode){case EventKeyboard::KeyCode::KEY_RIGHT_SHIFT:{key.isSelect = false;break;}case EventKeyboard::KeyCode::KEY_KP_ENTER:{key.isStart = false;break;}case EventKeyboard::KeyCode::KEY_J:{key.isB = false;break;}case EventKeyboard::KeyCode::KEY_K:{key.isA = false;break;}case EventKeyboard::KeyCode::KEY_A:{key.isLeft = false;break;}case EventKeyboard::KeyCode::KEY_S:{key.isDown = false;break;}case EventKeyboard::KeyCode::KEY_D:{key.isRight = false;break;}case EventKeyboard::KeyCode::KEY_W:{key.isUp = false;break;}default:break;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型