我在flash动作脚本3中制作游戏,差不多完成但我遇到了一些问题...... 我将首先解释一下这个游戏:你是一个角色(目前是一个黑色的方块),你必须通过跳跃下降的块来尽可能高。我现在能做的就是跳跃并与棋子发生碰撞(左 - 右)并跳到街区。
我遇到的问题是:当2个区块完全相邻时(区块A落在区块B旁边)然后我跳到区块A并且我想要跑到区块B(只是在没有跳跃的情况下运行)我得到的东西非常奇怪,我不能走上街区:s 我现在正在寻找一个星期但仍然没有进展。所以我希望我能在这里得到任何帮助。没有任何可视化就很难解释这个问题所以我上传了这些文件,所以你可以自己测试一下。 下载链接:http://www.megaupload.com/?d=JT4158KA
我仍然是初学者,所以得到一点帮助会很棒。我坚持了一个多星期了:s 我甚至问我的老师,他无法解决。所以我希望你们能帮忙
但是如果你理解我的解释和/或懒得下载我的文件(17kb big:p),这里的问题应该是代码
package Classes
{ import flash.events。*; import flash.display.MovieClip; import flash.display.Stage; import 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);
}
}
}
}
答案 0 :(得分:0)
问题在于:
if (isHit() == true)
{
this.x = blockX - this.width - 1;
this.y = blockY;
}
你跳上去了。然后按右箭头向右移动(您将到达此行else if (key.isDown(Keyboard.RIGHT))
)。在此代码中,您检查是否存在任何冲突。是的,他们是,因为你留在街区。所以你的角色得到了这个坐标:
this.x = blockX - this.width - 1; this.y = blockY;
但是blockX,blockY和this.width是固定的。所以你的角色被固定了。
答案 1 :(得分:0)
我已经解决了这个问题。问题出在函数isHit() 我还添加了一些新功能,如菜单,分数,推特提要。
我差不多完成游戏了。再加上一件事,如果我对自己的角色足够高,在某个时刻我无法获得任何更高的东西,因为我已经到达了我的场景的顶部。我想要例如。如果我的角色占据了我场景的50%,那么场景会“上升”,我可以在游戏中达到无限的状态,就像我的角色永远不会达到我的场景顶部。我怎么能这样做?
以下是具有新功能的更新游戏:) http://www.megaupload.com/?d=TGGTKF5N
提示/技巧或改进和反馈总是受欢迎=)