[已解决]为什么这样加不进startItem

请把代码粘贴在这里
#include “WelcomeLayer.h”
#include “GameScene.h”
#include “GameOverLayer.h”

WelcomeLayer::WelcomeLayer(void)
{
}

WelcomeLayer::~WelcomeLayer(void)
{
}

bool WelcomeLayer::init()
{
bool bRet=false;
do
{
CC_BREAK_IF(!CCLayer::init());

    //png加入全局cache中
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("ui/shoot_background.plist");
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("ui/shoot.plist");

    CCSize winSize=CCDirector::sharedDirector()->getWinSize();

    //加入background
    CCSprite* background=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));
    background->setPosition(ccp(winSize.width/2,winSize.height/2));
    this->addChild(background);

    
    //加入copyright
    CCSprite* copyright=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("shoot_copyright.png"));
    copyright->setAnchorPoint(ccp(0.5,0));
    copyright->setPosition(ccp(winSize.width/2,winSize.height/2));
    this->addChild(copyright);


    //加入loading
    CCSprite* loading=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("game_loading1.png"));
    loading->setPosition(ccp(winSize.width/2,winSize.height/2-40));
    this->addChild(loading);

    CCAnimation* animation=CCAnimation::create();
    animation->setDelayPerUnit(0.2f);
    animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("game_loading1.png"));
    animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("game_loading2.png"));
    animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("game_loading3.png"));
    animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("game_loading4.png"));

    CCAnimate* animate=CCAnimate::create(animation);
    CCRepeat* repeat=CCRepeat::create(animate,2);
    //CCCallFuncN* repeatdone=CCCallFuncN::create(this,callfuncN_selector(WelcomeLayer::loadingDone));
    //CCSequence* sequence=CCSequence::create(repeat,repeatdone,NULL);
    loading->runAction(CCRepeatForever::create(animate));;

    //加入startItem
    CCMenuItemImage* startItem = CCMenuItemImage::create("mainmenu_begin1.bng","mainmenu_begin2.png",this,menu_selector(WelcomeLayer::startButtonCallback));
    CC_BREAK_IF(!startItem);
    startItem->setPosition(ccp(winSize.width/2,winSize.height/2-60));
    CCMenu* pMenu = CCMenu::create(startItem,NULL);
    pMenu->setPosition(CCPointZero);
    addChild(pMenu);

    getHighestHistorySorce();

    this->setKeypadEnabled(true);

    bRet=true;
} while (0);

return bRet;

}

void WelcomeLayer::loadingDone(CCNode* pNode)
{
CCScene* pScene=GameScene::create();
CCTransitionMoveInB *animateScene=CCTransitionMoveInB::create(0.5f,pScene);
CCDirector::sharedDirector()->replaceScene(animateScene);
}

void WelcomeLayer::keyBackClicked()
{
CCDirector::sharedDirector()->end();
}

bool WelcomeLayer::isHaveSaveFile()
{
if(!CCUserDefault::sharedUserDefault()->getBoolForKey(“isHaveSaveFileXml”))
{
CCUserDefault::sharedUserDefault()->setBoolForKey(“isHaveSaveFileXml”, true);
CCUserDefault::sharedUserDefault()->setIntegerForKey(“HighestScore”,0);
CCUserDefault::sharedUserDefault()->flush();
return false;
}
else
{
return true;
}
}

void WelcomeLayer::getHighestHistorySorce()
{
if (isHaveSaveFile())
{
GameOverLayer::highestHistoryScore=CCUserDefault::sharedUserDefault()->getIntegerForKey(“HighestScore”,0);
}
}

void WelcomeLayer::startButtonCallback(CCObject* pSender)
{
CCScene* pScene=GameScene::create();
CCTransitionMoveInB *animateScene=CCTransitionMoveInB::create(0.5f,pScene);
CCDirector::sharedDirector()->replaceScene(animateScene);
}










为什么这样加不进startItem,那个.plist跟png都是亲自压缩的,别的信息都可以提取出来就开始的那个提取不出来。。。。

你看你的图片写错了吧! CCMenuItemImage::create(“mainmenu_begin1.bng”, 这个是.png的后缀吧

谢谢。。。。我去试试

改了还是出不来。。。

mainmenu_begin1.png你是单独的还是在一张大图里面的,如果是在一张大图里面的话就不能这样用了,就要先用CCSprite加载图片,然后使用CCMenuItemSprite来处理。

我直接新建了GameMenuLayer 跟GameMenuScene 来处理菜单。结果弄出来了,非常感谢你的细心帮助

是存放在一张大图里面的。。。。有。plist

大图的话就不能够使用 CCMenuItemImage,这个主要是小图片使用的。大图需要 CCSprite::createWithSpriteFrameName,嘿嘿解决了就好了哈:14:

谢谢,我又学到了一些东西,对了问你个问题啊,dpi是什么意思?可以在电脑上直接用像素来解释吗

每英寸像素数,在安卓中的话是手机屏幕密度的意思!具体的话还是需要度娘或Google一下。