皆さんこんにちは!
ActionScript 3.0 で、hitTestObject に小さな問題があります。キャラクターがプラットフォームにヒットしたかどうかを確認したい (単純なプラットフォーム ゲームを作成しています)。アクションスクリプト用にエクスプロートされたプラットフォームオブジェクトがあり、これを子から配列に追加します。この時点まではすべてうまくいき、私はそれらをステージなどに置くことができます.
私のキャラクターがプラットフォームにヒットしたかどうかをチェックするサイクルを書きましたが、正しく動作しません。私のキャラクターは最初のプラットフォームを通過して落下し、最後のプラットフォームにぶつかったときに落下が止まります. (したがって、配列の最後の部分ではうまく機能します。)
そして今、これが私のコードのこの部分です。誰かが私を助けてくれることを願っています。:)
import flash.events.Event;
import flash.geom.Rectangle;
stop();
var vy:Number=0;
var gv:Number=1;
var sebesseg:Number=4;
var jumped:Boolean=false;
var stay:Boolean=false;
var level:Array=new Array ;
var gravity:Number=2;
var velocity:Number=1.1;
var platform0:MovieClip=new platform ;
level.push(addChild(platform0));
level[0].x=200;
level[0].y=450;
var platform1:MovieClip=new platform ;
level.push(addChild(platform1));
level[1].x=700;
level[1].y=650;
var platform2:MovieClip=new platform ;
level.push(addChild(platform2));
level[2].x=1000;
level[2].y=800;
stage.addEventListener(Event.ENTER_FRAME, cameraFollowCharacter);
function cameraFollowCharacter(evt:Event) {
root.scrollRect=new Rectangle(PORK1_mc.x-(stage.stageWidth/2)+320,PORK1_mc.y-(stage.stageHeight/2)-50,stage.stageWidth,stage.stageHeight);
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,gomb);
function gomb(k:KeyboardEvent):void {
trace(k);
if (k.keyCode==37) {
if (sebesseg==2) {
sebesseg=sebesseg+0;
} else {
sebesseg-=1;
}
} else if (k.keyCode==39) {
sebesseg+=1;
} else if (k.keyCode==Keyboard.ESCAPE) {
stop();
root.scrollRect=new Rectangle (stage.x,stage.y,stage.stageWidth,stage.stageHeight);
gotoAndStop(2);
} else if (k.keyCode==Keyboard.F1 && stay==false) {
stage.frameRate=0;
stay=true;
} else if (k.keyCode==Keyboard.F1 && stay==true) {
stage.frameRate=24;
stay=false;
}
}
stage.addEventListener(Event.ENTER_FRAME, megy);
function megy(e:Event):void {
PORK1_mc.x+=sebesseg;
gravity*=velocity;
PORK1_mc.y+=gravity;
//trace(velocity);
}
この部分が問題です。HITTESOBJECT は最後のプラットフォームでのみ機能します
PORK1_mc.hitPork_mc これは私のキャラクターです (hitPork_mc は、HitTestObject を改善するための目に見えない四角形です。したがって、私が私の文字を書いたように、最後のプラットフォームまでプラットフォームを通り抜け、彼は最後に落ちて落下を停止します。配列の最後のプラットフォームでは、可能であれば、hitTest の部分だけを変更して、コードを大幅に変更したくありません。
this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
function handleEnterFrame(e:Event):void {
for (var i:int = 0; i < level.length; i++) {
if (level[i].hitTestObject(PORK1_mc.hitPork_mc)) {
velocity=0;
} else {
velocity=1.1;
gravity=4;
}
}
}
事前にご協力いただきありがとうございます。