Previous Entry Add to Memories Share Next Entry
Haxe и Nape
[info]oppx
Нашел 2D физический движок для Haxe - Nape. Т.к. это первый физический движок,используемй мною - то не стану говорить о нем  и перейду сразу к кодам, которые я нашел там и благополучно доработал напильником. И так. Все вооружились Ubuntu и напильником? Тогда поехали:
1. Открываем терминал и пишем:
wget -P HaXeNape http://nape.googlecode.com/files/As3Nape.swc
cd HaXeNape
unzip As3Nape.swc
haxe --gen-hx-classes library.swf
cd hxclasses
mv * ../
cd ..
 

Cоздаем файл Main.hx
geany Main.hx

со следующим содержанием:
package;

import nape.Space;
import nape.PhysObj;
import nape.Tools;
//import nape.Geom;
import nape.PhysObj;
import nape.Properties;
import nape.UniformSleepSpace;
import nape.Body;
import nape.Material;

import flash.events.Event;
import flash.events.MouseEvent;
import flash.Lib;
import flash.display.StageQuality;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

class Main {
    static var space:Space;
    static var prop:Properties;
    static function main() {
        space = new UniformSleepSpace(0,0,800,600,15);
       
        //create NAPE text representation
        var tf = new TextFormat();
        tf.bold = true;
        tf.font = "Verdana";
        tf.size = 35;
       
        var text = new TextField();
        text.text = "OPPX";
        text.setTextFormat(tf);
        text.autoSize = TextFieldAutoSize.LEFT;
        var bit = new BitmapData(Std.int(text.width), Std.int(text.height), false, 0xffffff);
        bit.draw(text);
       
        //MASSIVE air resistance
        prop = new Properties(0.005, 0.005);
       
        var b:Body;
        for (x in 0...bit.width) {
            for (y in 0...bit.height) {
                if (bit.getPixel(x, y) & 0xff < 0x80) {
                    space.addObject(b = Tools.createBox(20 + x * 7, 120 + y * 7, 7, 7, 0, 0, 0, false, Material.Tire, 1, 0, prop));
                    Lib.current.addChild(b.graphic);
                }
            }
        }

        //set graphical quality to medium
        Lib.current.stage.quality = StageQuality.MEDIUM;
       
        //set up events
        Lib.current.addEventListener(Event.ENTER_FRAME, enterFrame);
        Lib.current.stage.addEventListener(MouseEvent.MOUSE_DOWN, mdown);
    }
   
    static function mdown(ev) {
        var b:Body;
        var mx = ev.stageX;
        var my = ev.stageY;
       
        var vx = 400 - mx;
        var vy = 300 - my;
        if (vx * vx < 250*250) vx = 0;
        else vx -= if (vx < 0) -250 else 250;
       
        space.addObject(b = Tools.createCircle(mx,my, 8, vx*6,vy*6, 0, false, true, Material.Steel, 1, 0, prop));
        Lib.current.addChild(b.graphic);
    }

    static function enterFrame(ev) {
        //step 1/60th of a second through time in space.
        //since there's no gravity, no need for many iterations
        space.step(1/60, 1,1);
    }
}
 

И файл Hello.hxml
geany Main.hxml

со следующим содержанием:
-swf Hello.swf
-swf-header 800:600:60
-main Main
-swf-lib library.swf
-swf-version 10

И если сейчас попробовать собрать наш swf файл он будет ругаться на некий IntHash. Достаем напильник и пишем в терминале:
cd nape
sed -i 's/: IntHash;/: IntHash<String>;/g' Space.hx
cd ..

Т.е. заменяем ": IntHash" на ": IntHash<String>" в файле Space.hx
Теперь собираем:
haxe Main.hxml

И видим это: Hello.swf

Получилось здорово. Как раз то, что нужно для геймдевелопинга, а может и исче для чего-нибудь. А свою самую первую и самую простенькую игру я все-таки доделаю во flash cs3. Скоро уже напишу о ней здесь.

You are viewing [info]oppx's journal