像我本身一直都不知道要怎樣去紀錄分數,感謝這份教學提供了一個簡單的方法,一起來學吧。另外,還會增添一些音效在裡面,順便看一下簡單的加入音效的code吧。
另外,雖然之前沒有申明過,但這些系列的教學,是我為了讓自己真的去思考過這些code的內容,自己看code內容去說明的,當然有時候不太懂還是會看原文和翻譯是怎麼講的,畢竟我都懶的放圖了,也沒那閒功夫去換句話說。希望看過的人如果有意見,都可以留言交流一下。
這一次我們要新增一個類別,但不需要新開檔案,直接在HelloWorldLayer.h裡面,於@import和@interface HelloWorldLayer之間增加一個新的@interface HelloWorldHud。
在這個新的類別內:
@interface HelloWorldHud : CCLayer
{
CCLabelTTF *label;
}
- (void)numCollectedChanged:(int)numCollected;
@end
然後在HelloWorldLayer.h裡面增加變數:
int _numCollected;
HelloWorldHud *_hud;
以及特性:
@property (nonatomic, assign) int numCollected;
@property (nonatomic, retain) HelloWorldHud *hud;
然後到實作檔裡面新增:
@implementation HelloWorldHud
-(id) init
{if ((self = [super init])) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
label = [CCLabelTTF labelWithString:@"0"
dimensions:CGSizeMake(50, 20)
alignment:UITextAlignmentRight
fontName:@"Verdana-Bold"
fontSize:18.0];
label.color = ccc3(0,0,0);int margin =10;
label.position = ccp(winSize.width - (label.contentSize.width/2) - margin,
label.contentSize.height/2+ margin);
[self addChild:label];
}return self;
}
- (void)numCollectedChanged:(int)numCollected {
[label setString:[NSString stringWithFormat:@"%d", numCollected]];
}
@end
這邊我稍微改了一下,因為好像沒有CCLabel類別了。然後他主要在init方法裡面實作了會出現在畫面上的label。以及增加一個方法,可以改變Label的內容。
再回到HelloWorldLayer.m裡面:
一開頭實作這兩個特性:
@synthesize numCollected = _numCollected;
@synthesize hud = _hud;
在dealloc裡面新增:
self.hud = nil;
加到+(id) scene方法裡面的return那一行前面:
HelloWorldHud *hud = [HelloWorldHud node];
[scene addChild: hud];
layer.hud = hud;
加在setPlayerPosition方法裡面,於collectable那部份裡面,也就是刪除meta層該位置上的方塊那行下面:
self.numCollected++;
[_hud numCollectedChanged:_numCollected];
這樣就好了,編譯之後去吃你放置的好東西吧。
這部分很簡單,只要增加這些code:
表頭檔中導入這個類別:
#import "SimpleAudioEngine.h"
在HelloWorldLayer的init方法的最上面加入:
[[SimpleAudioEngine sharedEngine] preloadEffect:@"pickup.caf"];
[[SimpleAudioEngine sharedEngine] preloadEffect:@"hit.caf"];
[[SimpleAudioEngine sharedEngine] preloadEffect:@"move.caf"];
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"TileMap.caf"];
在尋找碰撞那邊增加碰撞音效:
[[SimpleAudioEngine sharedEngine] playEffect:@"hit.caf"];
在尋找可以吃的東西的那邊增加吃東西的音效:[[SimpleAudioEngine sharedEngine] playEffect:@"pickup.caf"];
在設定player位置的地方增加移動的音效:
[[SimpleAudioEngine sharedEngine] playEffect:@"move.caf"];
所以真正的重點在於,要在什麼地方放置音效?比方說player移動,你一定是要在確切移動player的sprite的那一步要聽到音效,對吧?所以設定player位置那一行後面就要放音效。或是吃到東西移除Foreground層的該方塊也要產生音效。如果音效不如預期,你可以依照code的邏輯去思考看看。
編譯吧!是不是有音樂了呢?記得要先把那些檔案都加進去。
另外,雖然之前沒有申明過,但這些系列的教學,是我為了讓自己真的去思考過這些code的內容,自己看code內容去說明的,當然有時候不太懂還是會看原文和翻譯是怎麼講的,畢竟我都懶的放圖了,也沒那閒功夫去換句話說。希望看過的人如果有意見,都可以留言交流一下。
開始
這一次我們要新增一個類別,但不需要新開檔案,直接在HelloWorldLayer.h裡面,於@import和@interface HelloWorldLayer之間增加一個新的@interface HelloWorldHud。
在這個新的類別內:
@interface HelloWorldHud : CCLayer
{
CCLabelTTF *label;
}
- (void)numCollectedChanged:(int)numCollected;
@end
然後在HelloWorldLayer.h裡面增加變數:
int _numCollected;
HelloWorldHud *_hud;
以及特性:
@property (nonatomic, assign) int numCollected;
@property (nonatomic, retain) HelloWorldHud *hud;
然後到實作檔裡面新增:
@implementation HelloWorldHud
-(id) init
{if ((self = [super init])) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
label = [CCLabelTTF labelWithString:@"0"
dimensions:CGSizeMake(50, 20)
alignment:UITextAlignmentRight
fontName:@"Verdana-Bold"
fontSize:18.0];
label.color = ccc3(0,0,0);int margin =10;
label.position = ccp(winSize.width - (label.contentSize.width/2) - margin,
label.contentSize.height/2+ margin);
[self addChild:label];
}return self;
}
- (void)numCollectedChanged:(int)numCollected {
[label setString:[NSString stringWithFormat:@"%d", numCollected]];
}
@end
這邊我稍微改了一下,因為好像沒有CCLabel類別了。然後他主要在init方法裡面實作了會出現在畫面上的label。以及增加一個方法,可以改變Label的內容。
再回到HelloWorldLayer.m裡面:
一開頭實作這兩個特性:
@synthesize numCollected = _numCollected;
@synthesize hud = _hud;
在dealloc裡面新增:
self.hud = nil;
加到+(id) scene方法裡面的return那一行前面:
HelloWorldHud *hud = [HelloWorldHud node];
[scene addChild: hud];
layer.hud = hud;
加在setPlayerPosition方法裡面,於collectable那部份裡面,也就是刪除meta層該位置上的方塊那行下面:
self.numCollected++;
[_hud numCollectedChanged:_numCollected];
這樣就好了,編譯之後去吃你放置的好東西吧。
放置音效
這部分很簡單,只要增加這些code:
表頭檔中導入這個類別:
#import "SimpleAudioEngine.h"
在HelloWorldLayer的init方法的最上面加入:
[[SimpleAudioEngine sharedEngine] preloadEffect:@"pickup.caf"];
[[SimpleAudioEngine sharedEngine] preloadEffect:@"hit.caf"];
[[SimpleAudioEngine sharedEngine] preloadEffect:@"move.caf"];
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"TileMap.caf"];
在尋找碰撞那邊增加碰撞音效:
[[SimpleAudioEngine sharedEngine] playEffect:@"hit.caf"];
在尋找可以吃的東西的那邊增加吃東西的音效:[[SimpleAudioEngine sharedEngine] playEffect:@"pickup.caf"];
在設定player位置的地方增加移動的音效:
[[SimpleAudioEngine sharedEngine] playEffect:@"move.caf"];
所以真正的重點在於,要在什麼地方放置音效?比方說player移動,你一定是要在確切移動player的sprite的那一步要聽到音效,對吧?所以設定player位置那一行後面就要放音效。或是吃到東西移除Foreground層的該方塊也要產生音效。如果音效不如預期,你可以依照code的邏輯去思考看看。
編譯吧!是不是有音樂了呢?記得要先把那些檔案都加進去。
留言
張貼留言