#!/usr/bin/python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2017/08/24 18:20:51 +0900> u""" Tiledで作った.tmxファイルを読み込んで表示してみるテスト. カーソルキーでスプライトを移動しつつスクロール。 Zキーで75%と100%表示を切り替え。 Dキーでデバッグ情報表示。 Windows10 x64 + Python 2.7.13 32bit + cocos2d 0.6.4 """ import cocos from cocos import actions from cocos.director import director import pyglet from pyglet import gl from pyglet.window import key class MyAction(cocos.actions.Action): u"""スプライトに与えるアクション.""" def step(self, dt): u"""毎フレーム呼ばれる処理. カーソルキーの入力で移動.""" x, y = self.target.position # キー入力で座標を変更 # keyboard[key.HOGE] は、ON/OFF が 1/0 で入るっぽい? spd = 512.0 * dt x += (keyboard[key.RIGHT] - keyboard[key.LEFT]) * spd y += (keyboard[key.UP] - keyboard[key.DOWN]) * spd # 画面外に出ないように補正 if x <= 32: x = 32 if x >= 2048 - 32: x = 2048 - 32 if y <= 32: y = 32 if y >= 2048 - 32: y = 2048 - 32 # スプライトの座標を更新 self.target.position = (x, y) # 指定座標が画面中央にくるようにスクロール scroller.set_focus(x, y) def main(): u"""メイン処理.""" global keyboard, scroller director.init(width=640, height=480, autoscale=False, # 自動拡大縮小 resizable=True # ウインドウサイズ変更可・不可 ) director.show_FPS = True # FPS表示 # スクロールマネージャを生成 scroller = cocos.layer.ScrollingManager() # キャラが乗るスクロールレイヤーを生成 chara_layer = cocos.layer.ScrollableLayer() # スプライトを生成して、スクロールレイヤーに登録 sprite = cocos.sprite.Sprite("enemy_ball.png") sprite.position = (320, 240) chara_layer.add(sprite) sprite.do(MyAction()) # .tmxファイルを読み込み map_resource = cocos.tiles.load('city_bg2.tmx') # タイルマップ用画像がぼやけないようにフィルタを設定 for res in map_resource.contents.values(): if isinstance(res, cocos.tiles.TileSet): # タイルセットだけを対象に for tile in res.values(): gl.glBindTexture(tile.image.texture.target, tile.image.texture.id) gl.glTexParameteri(tile.image.texture.target, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) gl.glTexParameteri(tile.image.texture.target, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) # タイルレイヤー情報を取得。レイヤー名でアクセスできる bg_city_layer = map_resource['bg_city'] bg_cloud_layer = map_resource['bg_cloud'] # パララックス(視差)を設定。奥のBGのスクロール量を少なくしている bg_city_layer.parallax = 0.25 # スクロールマネージャに登録 scroller.add(bg_city_layer) scroller.add(bg_cloud_layer) # キャラが載るレイヤーもスクロールマネージャに登録 scroller.add(chara_layer) scene = cocos.scene.Scene(scroller) # pygletのキーボード入力関係をdirectorに渡してるっぽい keyboard = key.KeyStateHandler() director.window.push_handlers(keyboard) # ウインドウにキーボード入力があった際の処理を関数として記述 def on_key_press(key, modifier): if key == pyglet.window.key.Z: # Zキーで拡大縮小 if scroller.scale == .75: scroller.do(actions.ScaleTo(1, 0.5)) else: scroller.do(actions.ScaleTo(.75, 0.5)) elif key == pyglet.window.key.D: # Dキーでデバッグ情報表示 bg_city_layer.set_debug(True) director.window.push_handlers(on_key_press) director.run(scene) if __name__ == '__main__': main()