Я делаю игру на Flash ActionScript 3, она почти готова, но у меня есть некоторые проблемы.
Учтите, что в этой игре вы персонаж (на данный момент черный квадрат) и вынужно подняться как можно выше, прыгая на падающие блоки.В настоящий момент я могу прыгать, сталкиваться с блоками (слева-справа) и прыгать на блоки.
Когда 2 блока падают точно рядом друг с другом (Блок А падает рядом с Блоком Б) Затем я прыгаю в блок А и хочу запустить в блок В (просто бегать без прыжков). Я получаю что-то очень странное, я не могу ходить по блокам.
Вот код, где должна быть проблема:
package Classes
{import flash.events. *;import flash.display.MovieClip;импортировать flash.display.Stage;импорт flash.ui.Keyboard;import Classes.KeyObject;
public class Player extends MovieClip
{
var isJumping:Boolean = false;
var jumpPower:int = 0;
var ground:int;
var stageRef:Stage;
var key:KeyObject;
var isDead:Boolean = false;
var allBlocks:Array;
var blockX:int;
var blockY:int;
var blockWidth:int;
var blockHeight:int;
var steps:int = 10;
var upPressed:Boolean = false;
public function Player(stageReff:Stage,allBlocks:Array)
{
stageRef = stageReff;
key = new KeyObject(stageRef);
this.allBlocks = allBlocks;
ground = stageRef.stageHeight;
addEventListener(Event.ENTER_FRAME,update);
//addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}
function isHit()
{
for (var j = 0; j < allBlocks.length; j++)
{
if (this.hitTestObject(allBlocks[j]) && allBlocks[j] != isOnTopOf())
{
blockX = allBlocks[j].x;
blockY = allBlocks[j].y;
blockWidth = allBlocks[j].width;
blockHeight = allBlocks[j].height;
return true;
}
}
return false;
}
function isHitTop()
{
for (var j = 0; j < allBlocks.length; j++)
{
if (this.PlayerBottom.hitTestObject(allBlocks[j].hitBoxTop))
{
jumpPower = 0;
isJumping = false;
this.y = allBlocks[j].y - allBlocks[j].height;
return true;
}
}
return false;
}
function isHitBottom()
{
for (var j = 0; j<allBlocks.length; j++)
{
if (this.hitTestObject(allBlocks[j].hitBoxBottom))
{
if (isJumping)
{
this.y = allBlocks[j].y + this.height;
jumpPower=0;
isJumping = false;
isDead = false;
trace(isDead);
}
else
{
isDead = true;
trace(isDead);
}
}
}
}
function isOnTopOf()
{
for (var j = 0; j < allBlocks.length; j++)
{
if (this.PlayerBottom.hitTestObject(allBlocks[j].hitBoxTop))
{
trace("is WEL onTopOf");
return allBlocks[j];
}
}
trace("is NIET onTopOf");
return null;
}
function update(evt:Event):void
{
if (!isDead)
{
isHitTop();
isHitBottom();
if (key.isDown(Keyboard.UP))
{
//Voorkomen dat hij 2x springt
if (! isJumping)
{
jumpPower = 12;
isJumping = true;
}
}
if (key.isDown(Keyboard.LEFT))
{
if (this.x > stageRef.stageWidth - stageRef.stageWidth)
{
this.x -= steps;
if (isHit() == true)
{
this.x = blockX + blockWidth + 1;
//trace("is gehit maar staat er niet op");
}
}
}
else if (key.isDown(Keyboard.RIGHT))
{
if (this.x < stageRef.stageWidth - this.width)
{
this.x += steps;
if (isHit() == true)
{
this.x = blockX - this.width - 1;
this.y = blockY;
}
}
}
if (isJumping)
{
this.y -= jumpPower;
jumpPower -= 2;
isHitTop();
isHitBottom();
}
if (! isJumping && ! isHitTop())
{
this.y += 7;
}
if (this.y > ground)
{
this.y = ground;
isJumping = false;
}
}
else
{
removeEventListener(Event.ENTER_FRAME,update);
}
}
}
}