通常一個遊戲裡面,會在地圖上放一些物品,讓玩家經過時可以取得並且使用,所以我們現在就要來看看怎麼作到這件事情。
開始
首先我並沒有打算在地圖上放上什麼特別的圖案,所以我會從原先用來佈置地圖的png檔中挑出一個比較特別的圖示,做為可以讓player吃的東西。
先想想,如果要放這樣一個方塊上去,可以在Background層裡面放嗎?當然不行,因為這是背景層,不可以變動的。那麼什麼層可以這樣放呢?我們要再作一個Layer,然後在這上面放置可以吃的圖示。於是,就取名叫Foreground吧。
記住要把這一層置於最上面,然後點選一個圖示放上去。放上去之後,再回到Objects層,把Objects層放到最上面,點選綠色圖示,重疊於剛剛你加入的圖示上面,然後回到紅色和綠色圖示所在的視窗,在這個綠色圖示上方按右鍵,進入屬性,名稱取為Collectable,值輸入True。
設置搜尋
回到HelloWorldLayer.h,加入一個變數:
CCTMXLayer *_foreground;
以及一個特性:
@property (nonatomic, retain) CCTMXLayer *foreground;
當然要到實作檔裡面去實作:
實作檔一開頭的地方輸入:
開始
首先我並沒有打算在地圖上放上什麼特別的圖案,所以我會從原先用來佈置地圖的png檔中挑出一個比較特別的圖示,做為可以讓player吃的東西。
先想想,如果要放這樣一個方塊上去,可以在Background層裡面放嗎?當然不行,因為這是背景層,不可以變動的。那麼什麼層可以這樣放呢?我們要再作一個Layer,然後在這上面放置可以吃的圖示。於是,就取名叫Foreground吧。
記住要把這一層置於最上面,然後點選一個圖示放上去。放上去之後,再回到Objects層,把Objects層放到最上面,點選綠色圖示,重疊於剛剛你加入的圖示上面,然後回到紅色和綠色圖示所在的視窗,在這個綠色圖示上方按右鍵,進入屬性,名稱取為Collectable,值輸入True。
設置搜尋
回到HelloWorldLayer.h,加入一個變數:
CCTMXLayer *_foreground;
以及一個特性:
@property (nonatomic, retain) CCTMXLayer *foreground;
當然要到實作檔裡面去實作:
實作檔一開頭的地方輸入:
@synthesize foreground = _foreground;dealloc裡面增加:
self.foreground = nil;init裡面載入background程式碼後面增加:
self.foreground = [_tileMap layerNamed:@"Foreground"];加到setPlayerPosition方法中,於if迴圈裡面的return之後(不是那個return的裡面,是那一步之後):
NSString *collectable = [properties valueForKey:@"Collectable"];if (collectable && [collectable compare:@"True"] == NSOrderedSame) {
[_meta removeTileAt:tileCoord];
[_foreground removeTileAt:tileCoord];
}
self.foreground = nil;init裡面載入background程式碼後面增加:
self.foreground = [_tileMap layerNamed:@"Foreground"];加到setPlayerPosition方法中,於if迴圈裡面的return之後(不是那個return的裡面,是那一步之後):
NSString *collectable = [properties valueForKey:@"Collectable"];if (collectable && [collectable compare:@"True"] == NSOrderedSame) {
[_meta removeTileAt:tileCoord];
[_foreground removeTileAt:tileCoord];
}
這和collision那部份一樣,不需重複了吧?只是要注意,他採取的動作是,把Meta層的該位置方塊移除,以及把Foreground層的該位置的方塊也移除。
編譯看看吧,是不是可以吃了呢?
編譯看看吧,是不是可以吃了呢?
留言
張貼留言