2011-01-09 12 views
1

はじめに:ナップは比較的新しいエンジンだと思うので、あなたがそれを知らない人もいるかもしれません。おそらくbox2dより速いですし、まともな文書があるのが好きです。ここにサイトがあります:http://code.google.com/p/nape/Napeのような物理エンジンを稼働させるにはどうすればいいですか?

私はプログラミングが比較的新しいです。私はAS3の基本的な機能にはまともですが、何らかのエンジンやフレームワークを実装しようとする度に、動作させることさえできません。 Napeと一緒に私は少し前よりも感じたが、私はまだ立ち往生した。

私の問題:私はAdobe CS5を使用していますが、hereのようにSWCファイルをインポートできました。次に、デモのソースをthis oneのようにコピーして動作させようとしましたが、エラーが続いています。新しいクラスファイルを作成し、デモソースをコピーしてステージに追加しようとしました。

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

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のようなものを使い始めたいとは思っていません(私はプログラムの使い方を習得しなければならないでしょう)が、それが役に立たなければ、試してみることができます。

+0

NapeはHaxeを使ってビルドされているので、あなたはhaxeのメーリングリストを試すことができるようです。 – goliatone

答えて

4

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

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); 
     } 
} 
} 

をそしてここでタイムラインコードです:

は、ここでのActionScriptのクラスの修正バージョンです

import flash.Boot; 
new Boot(); 

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

をFLAは、このセットアップのための60のフレームレートで800×600でなければなりません。 また、コンストラクタをinitメソッドに変更したことに注目してください。つまり、 ステージがそこにアクセスされ、Mainのインスタンスがステージに追加されるまで、 ステージへの参照はnullになります。

AS3とHaxeを混在させることは、プログラミングを初めて行う人にとっては簡単ではありません。あなたがHaxeに興味があれば、それを求めてください。そうでなければ、より簡単な2D物理学のために、Box2D World Construction Kitをお勧めします。コンポーネント定義を使用してIDEで世界のプロトタイプを簡単に作成できるため、Alchemyを使用しているため直接AS3ポートよりも少し速いはずです。

World Construction Kit

また、あなたが始めるためにgotoAndLearn上で無料入門ビデオチュートリアルがあります。

Goodluck!

+0

Wow。私が今までに得ることができるより多くの情報。ありがとうございました^^ – Glacius

関連する問題