1

はじめに: Nape は比較的新しいエンジンだと思いますので、ご存じない方もいらっしゃると思います。おそらくbox2dよりも高速であり、適切なドキュメントがあることが気に入っています. ここにサイトがあります: http://code.google.com/p/nape/

私はプログラミングに比較的慣れていません。私は AS3 の基本的な機能についてはまともですが、ある種のエンジンやフレームワークを実装しようとするたびに、それを機能させることさえできません。うなじでは、以前よりも少し前進したように感じますが、まだ行き詰っています。

私の問題: Adob​​e CS5 を使用しています。ここで説明されているように SWC ファイルをインポートできました。次に、このようなデモの 1 つのソースをコピーして動作させようとしましたが、エラーが発生し続けます。新しいクラス ファイルを作成し、そこにデモ ソースをコピーして、ステージに追加しようとしました。

私のステージコードは基本的に次のようになります。

import flash.Boot; // these 2 lines are as described in the tutorial
new Boot(); 

var demo = new Main(); // these 2 are me guessing what I'm supposed to do
addChild(demo);

ソース コードがフラッシュによって有効なクラス ファイルとして認識されていないようです。編集してみましたが、認識されても(パッケージ名を付けて中括弧を追加してください)、それでもたくさんのエラーが発生します。疑似コードか何かですか?何が起こっている?

私の目標:私はこれについて間違った方向に進んでいると想像できます。それでは、私が達成しようとしていることを説明しましょう。私は基本的に、編集していじることができる単純な基本的な例から始めて、エンジンの使用方法を学びたいと思っています。実際の例さえ得られない場合、何も学ぶことができません。できれば、FlashDevelop のようなものを使い始めたくありません (プログラムの使い方を学ばなければならないため) が、やむを得ない場合は試してみることができます。

4

1 に答える 1

4

サイトのコード サンプルは、ActionScript ではなく Haxe であり、「package」を追加するときに発生したエラーについて説明しています。

以下は、ActionScript 用のクラスの修正バージョンです。

package{ 

import flash.display.Graphics; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.display.StageQuality; 

import nape.space.Space; 
import nape.space.UniformSleepSpace; 
import nape.util.Tools; 
import nape.geom.Vec2; 
import nape.geom.GeomPoly; 
import nape.phys.PhysObj; 
import nape.phys.Material; 
import nape.geom.AABB; 

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

public class Main extends Sprite
{ 
        private var space:Space; 

        private var g:Graphics; 
        private var vl:Array; 
        private var px:Number; private var py:Number; 

        //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

        private function mouseDown(ev:MouseEvent):void { 
                var x = stage.mouseX; 
                var y = stage.mouseY; 

                g.lineStyle(1, 0, 0.5); 
                vl.push(new Vec2(x, y)); 
                g.moveTo(x, y); 
                px = x; py = y; 
        } 

        private function mouseUp(ev:MouseEvent):void { 
                if (vl.length >= 3) { 
                        var poly = new GeomPoly(vl); 
                        poly.simplify(50, 4); 
                        if (!poly.selfIntersecting()) { 
                                if (!poly.cw()) poly.points.reverse(); 

                                var p = Tools.createConcave(poly, 0, 0, 0, false, Material.Wood); 
                                space.addObject(p); 
                                addChild(p.graphic); 
                        } 
                } 
                g.clear(); 
                vl = new Array(); 
                px = -100; 
        } 

        //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

        public function init(ev:Event = null)
        { 
                var s = new Sprite(); 
                g = s.graphics; 
                addChild(s); 
                s.cacheAsBitmap = true; 
                vl = new Array(); 
                px = -100; 

                space = new UniformSleepSpace(new AABB(0,0, 800,600), 30, new Vec2(0, 250)); 

                var p:PhysObj; 
                space.addObject(p = Tools.createBox(-20, 300, 50, 600, 0, 0, 0, true, Material.Wood)); 
                addChild(p.graphic); 
                space.addObject(p = Tools.createBox(820, 300, 50, 600, 0, 0, 0, true, Material.Wood)); 
                addChild(p.graphic); 
                space.addObject(p = Tools.createBox(400, -20, 800, 50, 0, 0, 0, true, Material.Wood)); 
                addChild(p.graphic); 
                space.addObject(p = Tools.createBox(400, 620, 800, 50, 0, 0, 0, true, Material.Wood)); 
                addChild(p.graphic); 

                stage.quality = StageQuality.MEDIUM; 
                stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); 
                stage.addEventListener(MouseEvent.MOUSE_UP,   mouseUp); 
                stage.addEventListener(Event.ENTER_FRAME,     enterFrame); 
        } 

        //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

    private function enterFrame(ev:Event) { 
                graphics.clear(); 
                graphics.lineStyle(1, 0, 1); 
                if (px != -100) { 
                        var x = stage.mouseX; 
                        var y = stage.mouseY; 
                        var dx = x - px; var dy = y - py; 
                        if (dx * dx + dy * dy > 5) { 
                                vl.push(new Vec2(x, y)); 
                                px = x; py = y; 
                                g.lineTo(x, y); 
                        }else { 
                                graphics.moveTo(px, py); 
                                graphics.lineTo(x, y); 
                        } 
                } 

        space.step(1/60, 6, 6); 
        } 
}
}

そして、タイムラインのコードは次のとおりです。

import flash.Boot; 
new Boot();

var m:Main = new Main();
m.addEventListener(Event.ADDED_TO_STAGE, m.init);
addChild(m)

この設定では、fla は 800x600、frameRate は 60 である必要があります。また、コンストラクターを init メソッドに変更したことにも注目してください。これは、そこでステージにアクセスし、Main のインスタンスがステージに追加されるまで、ステージへの参照が null になるためです。

プログラミングの初心者にとって、AS3 と Haxe を混在させることは容易ではありません。Haxe に興味がある場合は、それを試してみてください。それ以外の場合は、2D 物理演算をより簡単にするために、Box2D World Construction Kitを試してみることをお勧めします。コンポーネント定義を使用して、IDE でワールドを直接簡単にプロトタイプ化できます。また、Alchemy を使用しているため、直接 AS3 ポートよりも少し高速です。

ワールド コンストラクション キット

また、 gotoAndLearnには無料の紹介ビデオ チュートリアルがあります。

幸運を!

于 2011-01-10T01:42:40.123 に答える