Cocos2d は2次元ゲームのフレームワーク.Python で動く. (Cocos2d から派生した Cocos2d-x は iOS や Android でも動き、普及している.)
このWebページでは、次の基本的なことを、見本プログラムで演習する.
関連する資料:Cocos2d の概要 [PDF], [パワーポイント]
関連する資料:ゲームエンジン[PDF], [パワーポイント]
関連する資料:Cocos2d のイベントハンドラ、アクション
【外部ページへのリンク】 http://python.cocos2d.org/doc.html
謝辞
Cocos2d の作者に感謝します.
手順は,別ページ »で説明
インストールを行わず,Google Colaboratory を利用することもありえる. Google Colaboratory の使い方などは, 別ページ »で説明
Python プログラムの実行
Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.
Python のまとめ: 別ページ »にまとめ
import random import cocos from cocos import scene from cocos.layer import Layer, ColorLayer from cocos.director import director import pyglet from pyglet.window import key from time import sleep class MyActor(cocos.text.Label): def __init__(self, text, x, y, size, rgba): super(MyActor, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.position = cocos.euclid.Vector2(x, y) class Layer00(Layer): is_event_handler = True def __init__(self): super(Layer00, self).__init__() self.myactor = MyActor("Hello,World!", 400, 240, 32, (0, 200, 255, 255)) self.add(self.myactor) director.init(width=640, height=480) director.run( scene.Scene( Layer00() ) )
■ 演習問題: 「Hello World!」のところを書き換えて、表示されるテキストを変えてみなさい.実行ボタンを押して確認すること
■ 演習問題: 「font_size = 32」のところを書き換えて、フォントサイズを変えてみなさい.実行ボタンを押して確認すること
キーボードのキーが押されたり、離されたりするというイベントが起きると、 self.keys_being_pressedに「いま押されているキー(複数可)」の情報を入れる
エディタの画面にコピー&ペーストして,実行ボタンをクリック.
import random import cocos from cocos import scene from cocos.layer import Layer, ColorLayer from cocos.director import director import pyglet from pyglet.window import key from time import sleep class MyActor(cocos.text.Label): def __init__(self, text, x, y, size, rgba): super(MyActor, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.position = cocos.euclid.Vector2(x, y) class Layer00(Layer): is_event_handler = True def __init__(self): super(Layer00, self).__init__() self.myactor = MyActor("Hello,World!", 400, 240, 32, (0, 200, 255, 255)) self.keys_being_pressed = set() self.update_text() self.add(self.myactor) def update_text(self): key_names = [key.symbol_string(k) for k in self.keys_being_pressed] self.myactor.element.text = "Keys: " + ", ".join(key_names) def on_key_press(self, key, modifiers): self.keys_being_pressed.add(key) self.update_text() def on_key_release(self, key, modifiers): self.keys_being_pressed.remove(key) self.update_text() director.init(width=640, height=480) director.run( scene.Scene( Layer00() ) )
■ 演習問題: 上の手順を行いなさい
エディタの画面にコピー&ペーストして,実行ボタンをクリック.
import random import cocos from cocos import scene from cocos.layer import Layer, ColorLayer from cocos.director import director import pyglet from pyglet.window import key from time import sleep class MyActor(cocos.text.Label): def __init__(self, text, x, y, size, rgba): super(MyActor, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.position = cocos.euclid.Vector2(x, y) class Layer00(Layer): is_event_handler = True def __init__(self): super(Layer00, self).__init__() self.position_x = 0 self.position_y = 0 self.myactor = MyActor("Hello,World!", 0, 0, 32, (0, 200, 255, 255)) self.add(self.myactor) def update_text(self, mouse_x_pos, mouse_y_pos): self.myactor.element.text = 'Mouse is at %d,%d' % (mouse_x_pos, mouse_y_pos) self.myactor.x = self.position_x self.myactor.y = self.position_y def on_mouse_motion(self, x, y, dx, dy): self.update_text(x, y) def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): self.update_text(x, y) def on_mouse_press(self, x, y, buttons, modifiers): self.position_x, self.position_y = director.get_virtual_coordinates(x, y) self.update_text(x, y) director.init(width=640, height=480) director.run( scene.Scene( Layer00() ) )
■ 演習問題: 上の手順を行いなさい
エディタの画面にコピー&ペーストして,実行ボタンをクリック.
import random import cocos from cocos import scene from cocos.layer import Layer, ColorLayer from cocos.director import director import pyglet from pyglet.window import key from time import sleep class MyActor(cocos.text.Label): def __init__(self, text, x, y, size, rgba): super(MyActor, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.position = cocos.euclid.Vector2(x, y) class Layer00(ColorLayer): is_event_handler = True def __init__(self): super(Layer00, self).__init__(155, 89, 182, 1000) self.myactor = MyActor("Layer00", 400, 240, 32, (0, 200, 255, 255)) self.add(self.myactor) def on_key_press(self, key, modifiers): director.replace(scene.Scene(Layer01())) class Layer01(ColorLayer): is_event_handler = True def __init__(self): super(Layer01, self).__init__(231, 76, 60, 1000) self.myactor = MyActor("Layer01", 400, 240, 32, (0, 200, 255, 255)) self.add(self.myactor) def on_key_press(self, key, modifiers): director.replace(scene.Scene(Layer00())) director.init(width=640, height=480) director.run( scene.Scene( Layer00() ) )
■ 演習問題: 上の手順を行いなさい