en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

6.14.2011

簡單的場景切換

 

延續之前在 CCScene 中加入單張影像的方法文章中的設定,該程式中只有一個場景 CCScene,現在我們要製作另一個場景,並在這兩個場景之間進行簡單的轉換(過場),請看以下程式碼。

首先是先建立一個全新的場景,作法是專案上點擊滑鼠右鍵選擇 New File,找到 CCNode class 然後新增一個 CCNode Subclass(CCScene、CCLayer 和 CCSprite 都是繼承此類別)並命名為 NextScene。


網路上有些文章會希望你將由繼承 CCNode 類別改成繼承 CCScene 類別,目的只是為了方便分辨所建立的物件,其實不管繼承哪一個類別都不會影響之後的操作。

緊接著我們要替剛剛建立的 NextScene 物件補上建構式和解構式,其程式碼如下。

NextScene.m
- (ImageLayer *)init {
    if ((self=[super init])) {

        //取得整個畫面的大小
        CGSize screenSize = [CCDirector sharedDirector].winSize;

        //製作一張影像
        CCSprite *logoSprite = [CCSprite spriteWithFile:@"Landspace.png"];

        //調整影像位置
        logoSprite.position = ccp(screenSize.width / 2,screenSize.height / 2);

        //調整大小為原來的一半
        logoSprite.scale = 0.5;

        //加入影像
        [self addChild: logoSprite];
    }

    return self;
}

- (void)dealloc {
    [super dealloc];
}
建構式和解構是都和原先的 ImageLayer 差不多,只是將顯示影像的大小改成原來的一半,以表示真的有換到下一個場景。接下來回到 ImageLayer.m 檔,補上 #import 並修改一下建構式,使它在一定秒數內進行場景的切換。

#import "NextLayer.h"
ImageLayer.m
- (ImageLayer *) init {
    if ((self=[super init])) {
        CGSize screenSize = [CCDirector sharedDirector].winSize;
        CCSprite *logoSprite = [CCSprite spriteWithFile:@"Landspace.png"];
        logoSprite.position = ccp(screenSize.width / 2,screenSize.height / 2);
        [self addChild: logoSprite];

        //五秒後呼叫goNextLayer:方法
        [self schedule:@selector(goNextLayer:) interval:5.00];
    }
    return self;
}

- (void)goNextLayer:(ccTime)t {

    //切換到NextScene
    [[CCDirector sharedDirector] replaceScene: [NextScene node]];
}

程式在執行之後,原來的場景經過一定秒數就會被 CCDirector 切換到 NextScene,也就是我們所設定的第二個場景。





沒有留言:

張貼留言