好奇 cocos2d 到底是怎樣乙個框架,正好有個專案需要乙個遊戲框架,所以稍微了解了一下。小結一下了解到的情況。
基本概念
首先呢,因為 cocos2d 是基於 pyglet 做的,你完全可以直接用 pyglet 達到你想要的效果。但是,沒必要重複造輪子。
cocos2d 的基本概念包括了 director、scene、layer。框架的作者認為,寫遊戲和排練電影動畫片差不多。director 呢就是導演的意思,scene 就是場景,layer 就是層次。對此,我們可以簡單理解為,乙個遊戲有且只有乙個導演(director),然後呢,這個遊戲可以有多個場景(scene),比如 level1、level2、level3 等等。每個 scene 呢,是可以分為很多個層(layer)「布景」的,白色背景牆是一層,移動的路人是一層,我們的主角是一層。
scene 由很多個 layer 組成。
director 控制 scene 的順序,以及 show 或者 hide。
我們可以新增乙個可以執行各種動作的主角 sprite;事實上,文件的另一部分中,也把它們叫做 actor。
或者一段文字說明 label。
或者是乙個選單 menu。
還有,滑鼠和鍵盤都可以直接使用 pyglet 的模組。(cocos.layer can automatically listen to director.window events: in your layer subclass set the is_event_handler class member to true and cocos will take care.)
當然,有這三樣,就可以寫很多遊戲了。
我的實踐
下面是乙個簡單實踐,在 cocos2d 自帶的 samples 基礎上改的。程式的第一幕,是乙個小人,在螢幕上出現,並旋轉;轉到下一幕的條件是按鍵 enter。當按鍵 enter 按下時,director 開始放映第二幕——第二幕只有一層,著一層的內容在 helloworld() 中有定義。
from__future__
import
division, print_function, unicode_literals
import
sysimport
ossys.path.insert(0, os.path.join(os.path.dirname(
__file__), '..'
))import
cocos
from cocos.actions import *
from pyglet.window import
keyclass
hellosprite(cocos.layer.colorlayer):
is_event_handler =true
def__init__
(self):
super(hellosprite, self).
__init__(64, 64, 224, 255)
sprite = cocos.sprite.sprite('
grossinis_sister2.png')
sprite.position = 320, 240sprite.scale = 2self.add(sprite)
scale = scaleby(3, duration=2)
sprite.do(repeat(scale +reverse(scale)))
defon_key_release(self, keys, mod):
#enter: replace scene
if keys ==key.enter:
cocos.director.director.replace(cocos.scene.scene(helloworld()))
return
true
class
helloworld(cocos.layer.layer):
def__init__
(self):
super(helloworld, self).
__init__
() label = cocos.text.label('
hello, cocos!',
font_size=32,
anchor_x='
center
', anchor_y='
center')
label.position = 320, 240self.add(label)
if__name__ == "
__main__":
cocos.director.director.init()
hello_layer =hellosprite()
hello_layer.do(rotateby(360, duration = 10))
first_scene =cocos.scene.scene(hello_layer)
cocos.director.director.run(first_scene)
嘗試一下GNU Guile
參考guile的tutoria來建立乙個帶指令碼支援的繪圖程式 1.使用macports安裝guile和gnuplot sudo port install guile gnuplot 2.以管道的方式來操作gnuplot,注意需要在start gnuplot函式新增如下的設定 fprintf out...
嘗試一下GNU Guile
參考guile的tutoria來建立乙個帶指令碼支援的繪圖程式 1.使用macports安裝guile和gnuplot sudo port install guile gnuplot 2.以管道的方式來操作gnuplot,注意需要在start gnuplot函式新增如下的設定 fprintf out...
想嘗試一下WFS
最近想在地圖上做一點小東西好好學習一下,能夠想到的就是在文字框裡輸入乙個乙個地名,提交之後地圖轉到相關位置。本來是想自己寫乙個servlet,結合geotools來進行feature的查詢,這個想法應該是可行的,但是還要開乙個tomcat,再與postgresql建立乙個連線,總是顯得羅唆。第二個想...