Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何让Nape这样的物理引擎工作?_Actionscript 3_Flash_Haxe_Physics Engine - Fatal编程技术网

Actionscript 3 如何让Nape这样的物理引擎工作?

Actionscript 3 如何让Nape这样的物理引擎工作?,actionscript-3,flash,haxe,physics-engine,Actionscript 3,Flash,Haxe,Physics Engine,简介:我认为Nape是一个相对较新的引擎,所以你们中的一些人可能不知道它。它应该比box2d快,我喜欢有像样的文档。以下是网站: 我对编程比较陌生。我对AS3的基本功能很在行,但每次我尝试实现某种引擎或框架时,我都无法让它正常工作。有了Nape,我觉得我比以前走得更远了,但我还是被卡住了 我的问题是:我使用的是Adobe CS5,我成功地导入了SWC文件,如前所述。接下来,我试图复制一个类似演示的源代码,并让它工作,但我不断地出错。我制作了一个新的类文件,将演示源代码复制到其中,并尝试将其添加到

简介:我认为Nape是一个相对较新的引擎,所以你们中的一些人可能不知道它。它应该比box2d快,我喜欢有像样的文档。以下是网站:

我对编程比较陌生。我对AS3的基本功能很在行,但每次我尝试实现某种引擎或框架时,我都无法让它正常工作。有了Nape,我觉得我比以前走得更远了,但我还是被卡住了

我的问题是:我使用的是Adobe CS5,我成功地导入了SWC文件,如前所述。接下来,我试图复制一个类似演示的源代码,并让它工作,但我不断地出错。我制作了一个新的类文件,将演示源代码复制到其中,并尝试将其添加到后台

我的阶段代码基本上如下所示:

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);
好吧,看来flash甚至没有将源代码识别为有效的类文件。我试着编辑它,但即使我识别了它,给它一个包名并加上花括号,但我仍然会得到一大堆错误。是伪密码还是什么?发生了什么事


我的目标:我可以想象我走错了方向。让我来解释一下我想要实现的目标。我主要是想从一个简单的基本示例开始学习如何使用引擎,我可以编辑和处理这个示例。如果我连一个有效的例子都没有,那我就什么都学不到。最好我不想开始使用像FlashDevelop这样的东西,因为我必须学习如何使用该程序,但如果没有帮助,我可以尝试一下。

网站上的代码示例是Haxe,而不是ActionScript,这解释了添加“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,帧速率为60。 另外,请注意,我已将构造函数更改为init方法。那是因为 在那里访问stage,直到Main的实例添加到stage, 对阶段的引用将为空

对于编程新手来说,混合使用AS3和Haxe并不容易。如果你对Haxe感兴趣,那就试试吧,否则,为了更简单的2D物理,我建议你试试。它允许您使用组件定义轻松地在IDE中直接创建世界原型,并且应该比direct AS3端口快一点,因为它使用的是Alchemy

此外,还有一个免费的介绍视频教程,让你开始


祝你好运

站点上的代码示例是Haxe,而不是ActionScript,这解释了添加“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,帧速率为60。 另外,请注意,我已将构造函数更改为init方法。那是因为 在那里访问stage,直到Main的实例添加到stage, 对阶段的引用将为空

对于编程新手来说,混合使用AS3和Haxe并不容易。如果你对Haxe感兴趣,那就试试吧,否则,为了更简单的2D物理,我建议你试试。它允许您使用组件定义轻松地在IDE中直接创建世界原型,并且应该比direct AS3端口快一点,因为它使用的是Alchemy

此外,还有一个免费的介绍视频教程,让你开始


祝你好运

因为Nape是使用Haxe构建的,所以看起来您可以尝试Haxe的邮件列表…因为Nape是使用Haxe构建的,所以看起来您可以尝试Haxe的邮件列表…哇。比我希望得到的更多的信息。非常感谢^^^哇。比我希望得到的更多的信息。多谢各位^^