の下で物理ベースのプラットを構築するだから私は、オンラインでこのチュートリアルを発見し、時間の下で、これを学習のアイデアは、私に訴え:は、チュートリアルを動作させることはできません:時間
http://active.tutsplus.com/tutorials/games/build-a-physics-based-platformer-in-under-an-hour/
問題は、ステップ14に達したときに動作させることができないということです。第2段落でムービーをテストすると、エラーが発生すると言います。 問題は、31行目のworld = nullに絞り込まれています。おそらくもっと具体的に私が知りたいことはであると思われます。チュートリアルで最終結果が得られるようにワールドを定義するにはどうすればよいですか?
編集2私はここで進歩を遂げています。知りたい人のためです。私はのlistenWhileVisibleメソッドをaddEventListenerメソッドで置き換えました。したがって、ワールドプロパティについても言及する必要はありません。ですから、ここではエラーはありませんが、チュートリアルのこの時点で、私はヒーローを左右に動かすことができますが、これは起こっていません。何か助けになる理由は?新しいコードは
の下に更新され、私は、各工程の後にテストムービーを試してみましたが、私は私のヒーロームービークリップにview.characters.HeroCharacterクラスを適用するまで、それはすべてのエラーを持っていませんでした。だから、問題はHeroCharacter.asにあるようです。だから、私は命令から悪意を持って行って、HeroCharacter.asを手に入れました。 FlashDevelopはチュートリアルのコードを貼り付けたときに必要なすべてのインポートを自動生成しませんでした。私は最終的にFlashの出力ウィンドウでこのエラーを取得するために、問題を絞り込ん:ここ
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at misc::Entity/listenWhileVisible()
at view.characters::HeroCharacter/create()
at misc::Entity/ensureCreated()
at Function/<anonymous>()
は、ActionScript
package view.characters
{
import Box2DAS.Collision.b2WorldManifold;
import Box2DAS.Common.V2;
import Box2DAS.Dynamics.b2World;
import Box2DAS.Dynamics.ContactEvent;
import Box2DAS.Dynamics.StepEvent;
import misc.Input;
import misc.Util;
import shapes.Box;
import wck.BodyShape;
import wck.ContactList;
import wck.World;
/**
* ...
* @author Hexel Colorado
*/
public class HeroCharacter extends Box {
private var contacts:ContactList;
public override function create():void {
reportBeginContact = true;
reportEndContact = true;
contacts = new ContactList();
contacts.listenTo(this);
fixedRotation = true;
addEventListener(StepEvent.STEP, world_stepEventHandler, false, 0, true);
addEventListener(ContactEvent.BEGIN_CONTACT, this_beginContactHandler, false, 0, true);
super.create();
}
private function world_stepEventHandler(e:StepEvent):void
{
var left:Boolean = Input.kd('LEFT', 'A');
var right:Boolean = Input.kd('RIGHT', 'D');
var jump:Boolean = Input.kp('UP', ' ', 'W');
if (jump) {
b2body.ApplyImpulse(new V2(0, -2), b2body.GetWorldCenter());
}
else if(left) {
b2body.ApplyImpulse(new V2(-2, 0), b2body.GetWorldCenter());
}
else if(right) {
b2body.ApplyImpulse(new V2(2, 0), b2body.GetWorldCenter());
}
}
private function this_beginContactHandler(e:ContactEvent):void
{
}
}
}
である私はステップ14条第2項で停止してきたし、続行されませんチュートリアルの残りの部分で私はこれを理解することができます。助けてくれてありがとう。
問題が見つかりました! googlerのために、ここで間違っています:super.createをオーバーライド関数の先頭に置く必要があります。なぜなら、あなたが最初に作成しなければワールドは存在しないからです。ここで見つけた:http://www.box2d.org/forum/viewtopic.php?f=19&t=6378 私は本当にこのチュートリアルが嫌いです。クレームは、問題を理解するのに何時間もかからずに実行できます。 –
私の最後のコメントでsuper.create()に気付いたら、10-15分かかりました:)しかし、あなたが何を意味しているのか理解しています。なぜ彼はそれを修正しなかったのか分かりません(おそらく古いバージョンのbox2d)。 25に十分なのかどうかはまだ分かりません。 – Neoraptor