終于http與socket伺服器以及cocos2dx之間的通信各種架構成功完成後,現在抽時間學習下mac下的cocoa application,當然啦 主要用于做編輯器。
很多童鞋問我為什麼不用swing swt等java的編輯器,這樣能跨平台。其實對于java寫編輯器呢,himi在還沒有接觸ios平台之前做android時自己已經寫過java的地圖編輯器和簡單動作編輯器。當然啦比較簡單,不使用java進行編寫編輯器的原因主要有三點:
1. 基于cocos2dx做遊戲了,基本上就用不到windows系統了。
2. 不管哪個平台的編輯器,其實都是一樣的,寫出的資料檔案哪個平台都能正常解析出來的。
3. 個人原因吧,himi喜歡mac下的東東,而且呢,基本上himi 的工作期間99%都在mac下,雖然裝有雙系統,各種切也不友善哈哈;
ok,不扯了,那麼本篇簡單入門下cocoa application吧;
首先安裝xcode,這個東東,神器一樣的東東不解釋;
ok,打開xcode,建立一個項目;如下圖:

一路下去後我們建立好了第一個cocoa application,雖然是個空項目,但是基本的menu和window 已經自帶了。
ok,首先在appdelegate.h 和appdelegate.m 下編寫一點小代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//
// appdelegate.h
// countapp
// created by himi on 12-6-3.
// copyright (c) 2012年 himi. all rights reserved.
#import <cocoa/cocoa.h>
@interface appdelegate : nsobject <nsapplicationdelegate>
{
iboutlet nsbutton *btn1;
iboutlet nsbutton *btnresult;
iboutlet nstextfield *tfshow ;
iboutlet nstextfield *tfresult;
}
@property (assign) iboutlet nswindow *window;
-(ibaction)btnpress:(id)sender;
@end
29
30
31
32
33
34
35
// appdelegate.m
#import "appdelegate.h"
@implementation appdelegate
@synthesize window = _window;
- (void)applicationdidfinishlaunching:(nsnotification *)anotification
// insert code here to initialize your application
-(ibaction)btnpress:(id)sender{
if(sender == btn1){
nsstring *str = [nsstring stringwithformat:@"%@%@",[tfshow stringvalue],@"1"];
[tfshow setstringvalue:str];
}else if(sender == btnresult){
[tfresult setstringvalue:[tfshow stringvalue]];
}
簡單說下代碼:
1 . nsbutton — 按鈕 ;
nstextfield 文本條;
2. iboutlet :一般都說叫“插座變量”,himi則喜歡說“仍”來形容;比如 iboutlet nsbutton *btn1 說通俗些就是把 btn1這個對象從代碼中扔出來,能讓我們的interface builder識别;
3. ibaction :動作,如果一個方法傳回值是ibaction,則表示這個方法是由ib 界面的對象觸發;
ok,下面接着打開mainmenu.xib檔案:
a) 剛才就說啦,xcode為我們生成項目時,已經把基礎的window和menu都建立好了,而且啟動項目後執行main.m入口函數中會預設加載這個mainmenu.xib檔案啦;
b) 這裡himi簡單加入了12個button(push button)和兩個textfield,還有一個image well做背景;如下圖:
ok,然後要做的隻有兩步,首先在選中你左側的 app delegate如下圖:
然後看你的項目最右側utilities視窗:
在這裡你就可以看到你之前在代碼中扔出來的一些對象和方法了。比如btn1,tfresult, 方法btnpress等,那麼細心的童鞋可能看到有個btn後面是個“!”感歎号,這個表示對應的對象找不到了,因為大家看到之前代碼中根本沒有對應扔出所謂的btn,原因是之前himi的nsbutton對象是起名字btn,後來改名字了,是以這裡提醒了,大家這裡要注意下;
然後将我們這些扔出來的對象跟你想對應控件關聯一下吧,加入這裡我們連接配接btn1,如下圖:
其他的大家按照此方式連接配接吧,函數也一樣哦,如果你想讓你的btnpress函數接受哪些控件觸發後相應次函數,那麼也一樣連接配接就ok啦。
當然除此之外有個簡單的連接配接方法,就是hold住你的control鍵,然後滑鼠點選xib中左側app delegate然後move到你想關聯的元件,然後松開滑鼠選中你希望連接配接的代碼中扔出來的對象即可;如下圖所示:
那麼這裡himi隻是簡單的将btn1,btnresult,和兩個textfield進行關聯,用于簡單的示範,并沒有把這個電腦也完整。。。大家不要這裡吐槽我什麼标題黨 – -。真沒必要寫完整,寫完整了就是浪費時間不是麼~ 要效率學習哈哈;
ok,回頭分析下appdelegate代碼:
在 -(ibaction)btnpress:(id)sender{}函數内;
首先判斷響應的組建是否是btn1,如果是ok,讓剛才在xib中最上面的textfield(tfshow)顯示出來,如果響應的是btnresult(“=”等号)那麼我就讓tfshow使用者輸入的都列印到我們window最下方的textfield(tfresult)上;
ok,下面是這個簡單application的示範截圖: