简介:,我认为Nape是一个相对较新的引擎,所以你们中的一些人可能不知道。它应该比box2d更快,我喜欢有很好的文档。以下是网站:http://code.google.com/p/nape/
我对编程比较陌生。我对AS3的基本功能很满意,但每次我尝试实现某种引擎或框架时,我似乎都无法让它工作起来。有了纳佩,我觉得我比以前有了一点进步,但我还是被困住了。
我的问题:--我正在使用Adobe,我成功地导入了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识别为一个有效的类文件。我试着编辑它,但是即使我得到了它的识别(给出一个包名并添加了花括号),但是我仍然会遇到很多错误。是psuedo代码还是什么?怎么一回事?
我的目标:,我可以想象我用错误的方式来做这件事。让我来解释一下我想要达到的目标。我基本上想学习如何使用引擎,从一个简单的基本示例开始,我可以编辑和处理这个示例。如果我连一个有用的例子都找不到,那么我什么也学不到。最好我不想开始使用类似FlashDevelop的东西(因为我必须学习如何使用这个程序),但是如果不能帮助,我可以试一试。
发布于 2011-01-10 01:42:40
站点上的代码示例是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,此设置的frameRate为60。另外,请注意,我已经将构造函数更改为init方法。这是因为在那里访问这个阶段,并且在将Main的实例添加到这个阶段之前,对stage的引用将为null。
对于刚开始编程的人来说,混合AS3和Haxe并不容易。如果你对Haxe感兴趣,那就去做吧,否则,对于更简单的2D物理,我建议给Box2D世界建设工具包一个机会。它允许您使用组件定义轻松地在IDE中创建原型,而且它应该比直接的AS3端口快一点,因为它使用的是炼金术。

此外,有一个关于gotoAndLearn的免费介绍视频教程,让您开始。
祝你好运!
https://stackoverflow.com/questions/4639254
复制相似问题