小嘗試一下 cocos2d

2022-02-21 11:08:28 字數 2531 閱讀 9154

好奇 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建立乙個連線,總是顯得羅唆。第二個想...