//// ScreenLayer.cpp// PocketNES//// Created by tianshuai on 7/26/15.////#include "ScreenLayer.h"#include "PocketNES.h"#include "MenuScene.h"#include "AudioPlayer.h"USING_NS_CC;ScreenLayer::~ScreenLayer(){if (_texture != NULL){delete _texture;}if (nesCore != NULL){nesCore->powerOff();nesCore = NULL;}}bool ScreenLayer::init(){if (!Layer::init()){return false;}isStart = false;nesCore = NULL;Size visibleSize = Director::getInstance()->getVisibleSize();Vec2 origin = Director::getInstance()->getVisibleOrigin();for (int i = 0; i < _screen_width * _screen_height; i++){unsigned char c = (unsigned char)cocos2d::random(0, 255);_frameBuffer8888[i] = c | (c << 8) | (c << 16) | (255 << 24);}_texture = new Texture2D;Size contentSize;_texture->initWithData(_frameBuffer8888, _screen_width * _screen_height * 4, Texture2D::PixelFormat::RGBA8888, _screen_width,_screen_height, contentSize);Sprite *screen = Sprite::createWithTexture(_texture);screen->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));screen->setScale( visibleSize.height / screen->getContentSize().height );this->addChild(screen);MenuItemImage *gameItem = MenuItemImage::create("ui/Games.png", "ui/Games.png", CC_CALLBACK_1(ScreenLayer::gameListCallBack, this));gameItem->setScale(visibleSize.height/8/64);gameItem->setPosition(Vec2((gameItem->getContentSize().width*gameItem->getScale())/2, visibleSize.height - (gameItem->getContentSize().height*gameItem->getScale())/2));MenuItemImage *setting = MenuItemImage::create("ui/Settings.png", "ui/Settings.png", CC_CALLBACK_1(ScreenLayer::setting, this));setting->setScale(visibleSize.height/8/64);setting->setPosition(Vec2(visibleSize.width- (setting->getContentSize().width*setting->getScale())/2, visibleSize.height - (setting->getContentSize().height*setting->getScale())/2));Menu *menu = Menu::create(gameItem,setting, NULL);menu->setPosition(0,0);this->addChild(menu);return true;}void ScreenLayer::onEnter(){Layer::onEnter();if (havaGame == true){key.init();if (nesCore != NULL ){nesCore->powerOff();nesCore = NULL;}startEmu();}scheduleUpdate();}bool ScreenLayer::startEmu(bool shouldLoadState){isStart = true;nesCore = new NesCore("nes/NstDatabase.dat");nesCore->gamePath = currentGame.gamePath;nesCore->gameSavePath = currentGame.gameSavePath;nesCore->initlize();bool success = nesCore->powerOn();//printf("%s loading image at path %s", __PRETTY_FUNCTION__, game.gamePath.c_str());if (!success){MessageBox("There was an error loading the selected game image.", "Unable to Load Game ROM");isStart = false;return false;}if (shouldLoadState){nesCore->loadState();}nesCore->activatePad1();nesCore->startEmulation();return true;}void ScreenLayer::update(float dt){if (!isStart){for (int i = 0; i < _screen_width * _screen_height; i++){unsigned char c = (unsigned char)cocos2d::random(0, 255);_frameBuffer8888[i] = c | (c << 8) | (c << 16) | (255 << 24);}}_texture->updateWithData(_frameBuffer8888, 0, 0, _screen_width, _screen_height);}void ScreenLayer::gameListCallBack(Ref* pSender){havaGame = false;MenuScene *menuScene = MenuScene::create();TransitionSlideInL *transtionScene = TransitionSlideInL::create(0.5, menuScene);Director::getInstance()->pushScene(transtionScene);}void ScreenLayer::setting(Ref* pSender){}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型