左: JavaScript / 右: Flash

どちらも、Haxe + NME から生成したもの。

application.nmml

<?xml version="1.0" encoding="utf-8"?>
<project>
    <!-- NMML reference: https://gist.github.com/1763850 -->
    
    <!-- metadata, make sure 'package' is at least 3 segments (ie. com.mycompany.myproject) -->
    <meta title="haxe_hellowrold_nme" package="com.blawat2015.haxehellowroldnme" version="1.0.0" company="mieki256" />
    
    <!-- output -->
    <app main="com.blawat2015.Main" file="haxehellowroldnme" path="bin" />
    
    <window background="#000000" fps="60" />
    <window width="320" height="480" unless="mobile" />
    <window orientation="landscape" vsync="true" antialiasing="0" if="cpp" />
    
    <!-- classpath, haxe libs -->
    <source path="src" />
    <haxelib name="nme" />
    
    <!-- assets -->
    <icon path="assets/nme.svg" />
    <assets path="assets/img" rename="img" />
    
    <!-- DLLs -->
    <ndll name="std" />
    <ndll name="regexp" />
    <ndll name="zlib" />
    <ndll name="nme" haxelib="nme" />

    <!-- optimize JS output -->
    <haxeflag name="--dead-code-elimination" if="html5" />
    <haxeflag name="--js-modern" if="html5" />
    
</project>

Main.hx

package com.blawat2015;

import nme.Assets;
import nme.display.Bitmap;
import nme.display.Sprite;
import nme.events.Event;
import nme.Lib;

/**
 * haxe + NME のテスト。
 * @author mieki256
 */

class Main extends Sprite 
{
    var img_bg:Bitmap;
    var obj : Array;
    var rot:Float;
    var SW:Int = 320;
    var SH:Int = 480;
    var BALL_MAX = 60;

    // コンストラクタ
    public function new() 
    {
        super();
        #if iphone
        Lib.current.stage.addEventListener(Event.RESIZE, init);
        #else
        addEventListener(Event.ADDED_TO_STAGE, init);
        #end
    }

    // 初期化処理
    private function init(e) 
    {
        // 背景画像を登録
        img_bg = new Bitmap(Assets.getBitmapData("img/bg.jpg"));
        addChild(img_bg);
        rot = 0.0;
        
        // 手前に表示するスプライトを発生させていく
        obj = new Array();
        var cr = 5.0;
        var ang = 0.0;
        var spd = 1.0;
        var scale = 0.6;
        var i = 0;
        while (i < BALL_MAX) {
            var spr = new Ball(ang, cr, spd, scale);
            addChild(spr);
            obj[i] = spr;
            ang += 0.01;
            cr += 3;
            spd += 0.08;
            scale += (0.4 / BALL_MAX);
            i++;
        }
        
        // 毎フレーム実行する関数を指定
        addEventListener(Event.ENTER_FRAME, this_onEnterFrame);
    }
    
    // 毎フレーム実行される処理
    private function this_onEnterFrame(event:Event):Void
    {
        // ボールを移動
        for (i in 0...obj.length) {
            var spr:Ball = obj[i];
            spr.update();
        }
        
        // 背景を拡大縮小
        var v = Math.sin(rot * Math.PI / 180);
        img_bg.scaleX = 1.2 + 0.2 * v;
        img_bg.x = -((SW * img_bg.scaleX) - SW) / 2;
        img_bg.scaleY = 1.1 - 0.1 * v;
        img_bg.y = -((SH * img_bg.scaleY) - SH) / 2;
        rot += 1;
    }
    
    static public function main() 
    {
        var stage = Lib.current.stage;
        stage.scaleMode = nme.display.StageScaleMode.NO_SCALE;
        stage.align = nme.display.StageAlign.TOP_LEFT;
        
        Lib.current.addChild(new Main());
    }
    
}

Ball.hx

package com.blawat2015;

import nme.Assets;
import nme.display.Bitmap;
import nme.display.Sprite;
import nme.events.Event;
import nme.Lib;

// 手前に表示するボール状のスプライト
class Ball extends Sprite
{
    var img:Bitmap;
    var rot:Float;
    var r:Float;
    var rot_spd:Float;
    var scale:Float;

    public function new(ang:Float, cr:Float, spd:Float, sz:Float)
    {
        super();
        
        // 画像を登録
        img = new Bitmap(Assets.getBitmapData("img/ball.png"));
        addChild(img);
        
        // 角度や半径等を初期化
        img.scaleX = sz;
        img.scaleY = sz;
        rot = ang;
        r = cr;
        rot_spd = spd;
        this.set_xy();
    }
    
    // 毎フレーム呼ばれる処理
    public function update():Void
    {
        set_xy();
        rot += rot_spd;
    }
    
    // Bitmapの座標値を指定
    private function set_xy():Void
    {
        var x = r * Math.cos(degToRad(rot)) + (320 / 2) - (img.width / 2);
        var y = r * Math.sin(degToRad(rot)) + (480 / 2) - (img.height / 2);
        img.x = x;
        img.y = y;
    }
    
    public inline static function degToRad(deg:Float):Float
    {
        return Math.PI / 180 * deg;
    }
    
}

ball.png

bg.jpg