私はキャラクタージャンプに成功しましたが、プラットフォームの上部には完全な衝突しかありませんが、浮動プラットフォームの底面に当たったとき、プラットフォームを通過し、プレイヤーはこれらのプラットフォームの端から落ちます。代わりに、彼はインスタンスのy軸で動作します。また、ゲームが最初に始まったとき、プレーヤーは特定のy座標で空中で走っています。とにかく私は問題を取り消すことができますか?これを0にAs3ジャンプ衝突問題
if(multiplePlatforms.hitTestPoint(warMage.x,warMage.y , true))//Check if the player hits any platforms in the array { warMage.y --;//Place the character a pixel above the platforms grav = 0;//Gravity isnt applied vsp = 0; jumped = false; } }
これはプラットフォーム上warmageを移動し、重力(およびVSP)を設定します彼:
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.text.engine.EastAsianJustifier;
import flash.sensors.Accelerometer;
var Key:KeyObject = new KeyObject(stage);//Help the stage checks for keypressed objects
//Initialized variable integers
var hsp:Number = 0;// horizontal speed
var vsp:Number = 0;// vertical speed
var grav:Number = 2;//Gravity
var fric:Number = 4//Friction
//Arrays list for platforms
//All Booleans
var lDown:Boolean = false;
var rDown:Boolean = false;
var jumped:Boolean = false;
var attacking:Boolean = false;
warMage.gotoAndStop("idleWarmage");//Initially starts at idle state
stage.addEventListener(Event.ENTER_FRAME, keyPressed);//Listens for buttons pressed
stage.addEventListener(Event.ENTER_FRAME, gameloop);// The physics applied to character
stage.addEventListener(Event.ENTER_FRAME, platformCollision);
function keyPressed(e:Event):void
{
if(Key.isDown(Key.LEFT))//If we pressed the left arrow button
{
lDown = true;//Condition to check if player is in running state
if(lDown = true)//If we are running left
{
warMage.x -= 15;//Move left
warMage.gotoAndStop("RunWarmage");//Play the running animation
warMage.scaleX = -1;//Flip the image scale
}
}else if(Key.isDown(Key.RIGHT))//If we pressed the right arrow button
{
rDown = true;//Condition to check if player is in running state
if(rDown = true)//If we are moving right
{
warMage.x += 15;//Move the position right
warMage.gotoAndStop("RunWarmage");//Play the animation
warMage.scaleX = 1//Face right
}
}else if(Key.isDown(Key.SPACE))//If we press the spacebar
{
warMage.gotoAndStop("AttackWarmage");//Play teh attack animation
warMage.x += 5; //Lunge right
if(warMage.scaleX == -1)//If we are initially facing left
{
warMage.x -= 10;//Lunge left
}
}else if(Key.isDown(Key.UP) || jumped == true)//If we press the up arrow or we've jumped
{
vsp = -25;;//vertical speed goes up to 20
jumped = true;//We know that player has jumped
warMage.gotoAndStop("JumpWarmage");//Play teh jump animation
}else if(jumped == false)//If we're not jumping
{
warMage.gotoAndStop("idleWarmage");//Return to idle position
}
}
function gameloop(e:Event)//This checks the laws per frame
{
if(warMage.x < 0)//Sets room boundaries for left
{
warMage.x = 0;
}
if(warMage.x > 1000)//Sets room boundaries for right
{
warMage.x = 1000;
}
}
function platformCollision(e:Event):void//Collision for the platforms
{
vsp += grav;
if(!multiplePlatforms.hitTestPoint(warMage.x,warMage.y , true) && jumped == true)
{
grav++;
warMage.y += vsp;
warMage.gotoAndStop("JumpWarmage");//Play teh jump animation
}
for(var i:Number = 0;i < 34; i++)
{
if(multiplePlatforms.hitTestPoint(warMage.x,warMage.y , true))//Check if the player hits any platforms in the array
{
warMage.y --;//Place the character a pixel above the platforms
grav = 0;//Gravity isnt applied
vsp = 0;
jumped = false;
}
}
}
申し訳ありませんが、私は実際にはゲーム開発でこれまでそうではなかったとして、その例を本当に理解できませんでした。 – user199845
自分の衝突コードを使用する場合、どのように複数のプラットフォームに適用することができますか? – user199845
あなたは関数内に衝突検出を置き、各プラットフォーム+プレイヤーを関数に渡します。それをやりたくないし、hitTestPointを使い続けたい場合は、問題を解決することができます。プラットフォームに触れたときに、異なるコードが実行されても、プラットフォームの上部または下部に触れるかどうかにかかわらず同じコードを実行していることが問題です。 – Snukus