zoukankan      html  css  js  c++  java
  • flash开源游戏引擎pushButton学习笔记(5)以xml组装游戏

    以下是一个完整的以xml组装游戏的实例:整个项目文件结构如下:

    1、assets/Level/common.xml 文件为pushButton引擎当中的组件组装文件,以下为该文件代码:

    代码
    <!DOCTYPE things PUBLIC "HJKHKJ" "PBEDTD.dtd">
    <things>
        
    <entity name="SpatialDB">
            
    <component name="Manager" type="com.pblabs.box2D.Box2DManagerComponent">
                
            
    </component>
        
    </entity>
        
        
    <entity name="Scene">
            
    <component name="Scene" type="com.pblabs.rendering2D.DisplayObjectScene">
                
    <trackObject componentReference="FeiJi"/>
                
    <sceneViewName>MainApp</sceneViewName>
            
    </component>
        
    </entity>
        
        
        
        
    <entity name="BG">
            
    <component name="Spatial" type="com.pblabs.rendering2D.SimpleSpatialComponent">
                
    <spatialManager componentReference="SpatialDB"/>
                
    <position>
                    
    <x>0</x>
                    
    <y>0</y>
                
    </position>
                
    <size type="">
                    
    <x>896</x>
                    
    <y>640</y>
                
    </size>
            
    </component>
            
            
    <component name="Render" type="com.pblabs.rendering2D.SpriteRenderer">
                
    <fileName>
                    assets/image/bgs.jpg
                
    </fileName>
                
    <positionProperty>@Spatial.position</positionProperty>
                
    <sizeProperty>@Spatial.size</sizeProperty>
                
    <scene componentReference="Scene"/>
            
    </component>
        
    </entity>
        
        
        
    <entity name="FeiJi">
            
    <component name="Spatial" type="com.pblabs.rendering2D.SimpleSpatialComponent">
                
    <position>
                    
    <x>0</x>
                    
    <y>0</y>
                
    </position>
                
    <spatialManager componentReference="SpatialDB"/>
            
    </component>
            
            
    <component name="Render" type="com.pblabs.rendering2D.SpriteRenderer">
                
    <fileName>assets/image/fanship.png</fileName>
                
    <positionProperty>@Spatial.position</positionProperty>
                
    <sizeProperty>@Spatial.size</sizeProperty>
                
    <scene componentReference="Scene"/>
            
    </component>
            
            
    <component name="Controller" type="controller.FeijiController">
                
    <positionReference>@Spatial.position</positionReference>
            
    </component>
            
        
    </entity>
        
        
        
    <entity name="HuaHua">
            
    <component name="Spatial" type="com.pblabs.rendering2D.SimpleSpatialComponent">
                
    <position>
                    
    <x>-400</x>
                    
    <y>0</y>
                
    </position>
                
    <size type="">
                    
    <x>60</x>
                    
    <y>60</y>
                
    </size>
                
    <spatialManager componentReference="SpatialDB"/>
            
    </component>
            
            
    <component name="Render" type="com.pblabs.rendering2D.SpriteRenderer">
                
    <fileName>assets/image/HH_baihe.png</fileName>
                
    <positionProperty>@Spatial.position</positionProperty>
                
    <sizeProperty>@Spatial.size</sizeProperty>
                
    <scene componentReference="Scene"/>
            
    </component>
            
    <component name="Controller" type="controller.HuaHuaController">
                
    <input childType="com.pblabs.engine.core.InputMap">
                    
    <GoUp>UP</GoUp>
                    
    <GoDown>DOWN</GoDown>
                
    </input>
            
    </component>
        
    </entity>
        
        
    <group name="Common">
            
    <objectReference name="SpatialDB"/>
            
    <objectReference name="Scene"/>
            
    <objectReference name="BG"/>
            
    <objectReference name="FeiJi"/>
            
    <objectReference name="HuaHua"/>
        
    </group>
    </things>

    2、MainApp 游戏运行的主类,也就是文档类

    代码
    package {
        
    import com.pblabs.box2D.Box2DManagerComponent;
        
    import com.pblabs.engine.PBE;
        
    import com.pblabs.rendering2D.DisplayObjectScene;
        
    import com.pblabs.rendering2D.SimpleSpatialComponent;
        
    import com.pblabs.rendering2D.SpriteRenderer;
        
    import com.pblabs.rendering2D.ui.SceneView;
        
        
    import controller.FeijiController;
        
    import controller.HuaHuaController;
        
        
    import flash.display.Sprite;

        
    public class MainApp extends Sprite
        {
            
    public function MainApp()
            {
                trace(
    "hello");
                PBE.startup(
    this);
                createScene();
                loadLevel();
                
            }
            
            
    private function createScene():void
            {
                var scene:SceneView
    =new SceneView();
                scene.width
    =1024;
                scene.height
    =600;
                PBE.initializeScene(scene);
                scene.name
    ="MainApp";
            }
            
            
            
            
    private function loadLevel():void
            {
                PBE.levelManager.addFileReference(
    0,"assets/Level/common.xml");
                PBE.levelManager.addGroupReference(
    0,"Common");
                
                PBE.levelManager.loadLevel(
    0);
                PBE.levelManager.start();
                
            }
            
            
            
            
            
    private function register():void
            {
                PBE.registerType(com.pblabs.rendering2D.DisplayObjectScene);
                
    //PBE.registerType();
                PBE.registerType(Box2DManagerComponent);
                PBE.registerType(SimpleSpatialComponent);
                PBE.registerType(SpriteRenderer);
                PBE.registerType(FeijiController)
                PBE.registerType(HuaHuaController);
            }
        }
    }

    3、FeijiController是消费机的控制器组件

    代码
    package controller
    {
        
    import com.pblabs.engine.PBE;
        
    import com.pblabs.engine.components.TickedComponent;
        
    import com.pblabs.engine.core.InputKey;
        
    import com.pblabs.engine.entity.PropertyReference;
        
        
    import flash.geom.Point;

        
    public class FeijiController extends TickedComponent
        {
            
            
    public var positionReference:PropertyReference;
            
            
            
            
    public function FeijiController()
            {
                
    super();
            }
            
            
    public override function onTick(deltaTime:Number):void
            {
                var position:Point
    =owner.getProperty(positionReference);
                
                
    if(PBE.isKeyDown(InputKey.RIGHT))
                {
                    position.x
    +=15;
                }
                
                
    if(PBE.isKeyDown(InputKey.LEFT))
                {
                    position.x
    -=15;
                }
                
                
    if(PBE.isKeyDown(InputKey.UP))
                {
                    position.y
    -=15;
                }
                
    if(PBE.isKeyDown(InputKey.DOWN))
                {
                    position.y
    +=15;
                }
                
                
                
                
                
                
                
                
    if(position.x>375)
                {
                    position.x
    =375;
                }
    else if(position.x<-375)
                {
                    position.x
    =-375;
                }
                
                owner.setProperty(positionReference,position);
            }
            
        }
    }

    4、HuaHuaController是小花的控制器组件

    代码
    package controller
    {
        
    import com.pblabs.engine.components.TickedComponent;
        
    import com.pblabs.engine.core.InputMap;
        
    import com.pblabs.engine.entity.PropertyReference;
        
        
    import flash.geom.Point;

        
    public class HuaHuaController extends TickedComponent
        {
            
            
    private var _input:InputMap;
            
            
    public function get input():InputMap
            {
                
    return _input;
            }
            
            
    public function set input(value:InputMap):void
            {
                _input
    =value;
                
    if(_input!=null)
                {
                    _input.mapActionToHandler(
    "GoUp",onGoUpHandler);
                    _input.mapActionToHandler(
    "GoDown",onGoDownHandler);
                }
            }
            
            
            
    private function onGoUpHandler(value:Number):void
            {
                trace(
    "向上");
                trace(value);
            }
            
            
    private function onGoDownHandler(value:Number):void
            {
                trace(
    "乡下");
                trace(value);
            }
            
            
            
            
            
            
    public function HuaHuaController()
            {
                
    super();
            }
            
            
    public override function onTick(deltaTime:Number):void
            {
            } 
            
        }
    }


  • 相关阅读:
    Operating System: Three Easy Pieces --- Page Replacement (Note)
    Operating System: Three Easy Pieces --- Page Fault (Note)
    Operating System: Three Easy Pieces --- Beyond Physical Memory: Mechanisms (Note)
    Operating System: Three Easy Pieces --- Paging: Small Tables (Note)
    Operating System: Three Easy Pieces --- Mechanism: Limited Direct Execution (Note)
    Operating System: Three Easy Pieces --- API (Note)
    Modern Operating System --- Chap 5.5.2 Clock Software
    Reed Solomon纠删码
    CodeBlocks 使用经验谈
    基于范德蒙矩阵的Erasure code技术详解
  • 原文地址:https://www.cnblogs.com/daidu/p/1728167.html
Copyright © 2011-2022 走看看