Recent Posts
Recent Comments
- sgwa 在 NSMutableArray應用:無限Sprite
- sgwa 在 NSMutableArray應用:無限Sprite
- sgwa 在 NSMutableArray應用:無限Sprite
- sgwa 在 NSMutableArray應用:無限Sprite
- bonjouryentinglai 在 NSMutableArray應用:無限Sprite
- Edden 在 NSMutableArray應用:無限Sprite
~我的iPhone程式筆記~
想當初剛接觸iPhone開發時,對UIKit是一翹不通,又是frame又是bounds的,搞的我一整個很挫折。後來因緣際會看到Cocos2d,只要sprite、center和addchild就幾乎搞定所有的畫面呈現,結果UIKit就被我放棄,改玩Cocos2d了。
Cocos2d雖然在畫面呈現上很方便很強大,但並不是什麼事情都用cocos2d做是最好的。有時候靠著UIKit裡內建的元件,我們可以很簡單的達成需要的工作。比方說,在遊戲裡,過關後要玩家輸入姓名,可以用UITextField。
UITextField不但提供了輸入的畫面,連鍵盤都幫你準備好了。Cocos2d再怎麼強大,應該也沒有人想要自己coding一個鍵盤出來吧?
另外有時候需要玩家輸入生日或進行選擇時,UIKit裡也提供了UIPickerView這個元件。
預設的元件,對使用者來說會有一種熟悉感,程式設計師也不用花太多腦筋在介面的呈現上。
這次我們就以UITextField為例,來看看怎麼在cocos2d的畫面上加入UIView吧!什麼?很簡單?cocos2d官網有教?ㄟ….被發現了,不過該講的還是要講,而且你確定官網上沒有漏掉什麼東西嗎?
既然很簡單,我們就來操作一次看看。首先,建立一個新的cocos2d專案。好了以後點選Build & Go確認所有設定運作正常。
接著在HelloWorldScene.m裡的- init下加入以下程式,建立一個新的UITextField。
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 200, 40)];
textField.borderStyle = UITextBorderStyleRoundedRect;
然後,剛剛說很簡單的那個,來來來,說看看怎麼把uiview加到cocos2d的畫面裡。
[[[CCDirector sharedDirector] openGLView] addSubview:textField];
啊不是很簡單= =
這是什麼情形?擺成直的就算了,鍵盤跳出來還擋住輸入畫面是怎麼回事?
官網教歸教,但沒仔細說明橫向遊戲遇到uiview時該怎麼處理。
來來來,看這邊,在addSubview之前,我們要把textField作一點點的調整,輸入:
textField.transform = CGAffineTransformMakeRotation(M_PI * (90.0 / 180.0));
這會讓textField順時針旋轉九十度。還沒有完,因為cocos2d和UIKit的座標原點不一樣,有時在調整uiview的位置時真的會想殺人。還好cocos2d提供了簡單的函式幫我們進行轉換,輸入:
textField.center = [[CCDirector sharedDirector] convertToUI:ccp(240, 250)];
convertToUI後面輸入的位置是以cocos2d原點在左下角的座標為依據,所以就螢幕上看到的,x=240是橫向螢幕的中心,y=100則是由螢幕下方往上250 pixel的位置。利用上述的函式,我們可以很輕易的把cocos2d裡的位置轉換給uiview。
現在再來看一下執行結果
如何?看著cocos2d和UIView完美的結合在一起,感覺還不賴吧^^
對了,上次有網友提到希望再看到一些遊戲的教學,不過小弟課業工作兩頭忙,要挪出時間來寫一篇豐富的教學實在有點困難。不知道大家還希望看到哪部份的教學,如果有空,我會盡力。
倒是我很佩服http://www.raywenderlich.com/的作者,同樣是iphone開發者,工作之餘還可以花時間寫那麼多長篇的教學。哪天應該寫信去請教他,是否可以讓我把他的文章翻譯後放在我的部落格,這樣以後自己要找資料方便,大家也看的開心。
我記得這樣子加入UITextField, 輸入文字時, 文字好像是直立的耶, 有點忘了
另外raywenderlich的作者好像會出一本cocos2d的書
版主,
我目前用cocos2d 1.0rc版, 不需要加入下列這一段, 就是橫的textField了.
textField.transform = CGAffineTransformMakeRotation(M_PI * (90.0 / 180.0));
我這樣的結果是對還是不對呀 ? ^^
我想這應該跟你怎麼控制cocos2d scene旋轉的設定有關吧~
太久沒碰了說XD
我想问一下一个iphone游戏代码的调用时怎么样的,我看过一个完整的代码,他在main函数里初始化了一个类,类里有很多方法,我不知道进入这个类时是从哪个方法开始的,有人说是依次开始的,但是我试验着打乱方法的顺序,结果游戏还是正常的运行,所以我很困惑,不知道代码之间是如何调用的
hello,你說的沒錯,在main函數里會初始一個叫UIApplication的物件,然後這個物件會去你的project裡找到一個叫xxxAppDelegate的類(xxx是project name),接著這個xxxAppDelegate就會執行applicationDidLaunchWithOption的function,裡面再把你想要顯示的view貼到window上,程式就開始跑了~
不好意思,想想請問一下,在透過 cocos2d 的方式,而且也順利的讓畫面有顯示出 UITextField 的鍵盤物件了,只不過這樣在 cocos2d 裡該透過哪個機制或是什麼樣的方式,把輸入後的字串傳到另一個變數裡頭呢?
感謝。
textfield就是textfield,不會因為到了cocos2d原本的功能就沒了。
NSString *myStr = textfield.text