我正在制作以口袋妖怪为主题的游戏,其中将包含各种迷你游戏。第一个场景要求角色在两个平台上跳跃,一个在右边,另一个在左边,以便到达一个Pokeball,触发一个迷你游戏。
角色正确跳跃并毫无问题地降落在平台上;但是,每当我尝试直接跳到平台下面时,角色就会卡住。他可以移动,但他的头部被卡在了底部(想象他沿着侧面滑动)。奇怪的是,一旦他的头部不再位于所述平台下方,他就会进行跳跃运动。我还发现,反复按下跳跃键会强迫角色进出平台。
附件是我到目前为止的代码:
var gravity:Number = 10;
var jumpPower:Number = 0;
var isJumping:Boolean = false;
var checkCollision:Boolean = false;
var checkJump:Boolean = false;
var ground:Number = 393 - trainer.height;
var isRight = false;
var checkUnder:Boolean = false;
var isLeft = false;
stage.addEventListener(KeyboardEvent.KEY_UP,released);
stage.addEventListener(KeyboardEvent.KEY_DOWN,pressed);
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN, doJump);
stage.addEventListener(Event.ENTER_FRAME, update);
stage.addEventListener(Event.ENTER_FRAME, ballHit);
//MOVING LEFT OR RIGHT CODE-----------------------------------------------------------
function released(event:KeyboardEvent){
if(event.keyCode == Keyboard.RIGHT){
isRight = false;
}
if(event.keyCode == Keyboard.LEFT){
isLeft = false;
}
}
function pressed(event:KeyboardEvent){
if(event.keyCode == Keyboard.RIGHT){
isRight = true;
}
if(event.keyCode == Keyboard.LEFT){
isLeft = true;
}
}
function loop(e:Event){
if(isRight){
trainer.x += 10;
}
if(isLeft){
trainer.x -= 10;
}
//trainer hits walls
if(trainer.x >= 500){
trainer.x = 500;
}
if(trainer.x <=0){
trainer.x = 0;
}
if(trainer.y <= 0){
trainer.y = 0;
}
}
// END OF MOVING LEFT OR RIGHT CODE-----------------------------------------------------------
//JUMP WITH GRAVITY CODE----------------------------------------------------------------------
function doJump(event:KeyboardEvent):void
{
if(isJumping == false){
if(event.keyCode == Keyboard.UP)
{
jumpPower = -35;
isJumping = true;
}
}
}
function update(evt:Event):void
{
if(isJumping == true)
{
trainer.y += jumpPower;
jumpPower += 5; }
if(trainer.y >= 300)
{
isJumping = false;
}
//character lands on platform
else if(trainer.y + 65 >= platformOne.y && trainer.x >= platformOne.x - 60 && trainer.hitTestObject(platformOne)){
isJumping = false;
}
else if(trainer.y + 65 >= platformTwo.y && trainer.x <= platformTwo.x + 250 && trainer.hitTestObject(platformTwo)){
isJumping = false;
}
else{
isJumping = true;
}
/*if(trainer.y > platformOne.y && trainer.x > platformOne.x && trainer.hitTestObject(platformOne)){
trace("test");
}*/
}
//END OF JUMP WITH GRAVITY CODE--------------------------------------------------------------
//CHECK BALL HIT CODE------------------------------------------------------------------------
function ballHit(checkCol:Event):void{
if(trainer.hitTestObject(pokeballOne)){
pokeballOne.visible = false;
checkCollision = true;
}
if(checkCollision == true){
pokeBallOpenOne.y = 33.3;
pokeBallOpenOne.x = 30.9;
btnChallenge1.y = 58.3;
btnChallenge1.x = 8.9;
}
}
//END OF CHECK BALL HIT CODE----------------------------------------------------------------
//CLICKING THE CHALLENGE BUTTON-------------------------------------------------------------
btnChallenge1.addEventListener(MouseEvent.CLICK,handleClick3);
function handleClick3(pEvent:MouseEvent){
stage.removeEventListener(Event.ENTER_FRAME, update);
stage.removeEventListener(Event.ENTER_FRAME, ballHit);
stage.removeEventListener(Event.ENTER_FRAME,loop);
gotoAndPlay("shootingStart", "Scene 4" );
}
//END OF CLICK THE CHALLEGNE BUTTON---------------------------------------------------------
所以,我想修复的问题是:
如何防止角色卡在平台上?
如何防止角色不再在平台下进行跳跃动作?
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
您遇到的问题是,您isJumping
和jumpPower
同时负责两件事:
isJumping
控制玩家是否可以跳过和是否应用了玩家的跳跃动作。
jumpPower
控制玩家的跳跃动作和让它们像重力一样落下。
可能有一种聪明的方法可以让所有这一切发挥作用,但我个人觉得更容易分开gravity
,isJumping
和jumpPower
变量。
看起来您已经在顶部有一个gravity
变量,但它似乎没有在其他任何地方使用,所以我建议:
gravity
为真,则每次更新都会将isJumping
添加到玩家的y速度。isJumping
签入update
换成if (jumpPower < 0)
,或者只是在按下键盘时立即将跳跃力添加到玩家的y速度。isJumping
为假,但是如果他们向上移动设置为jumpPower
并且他们的y速度为{{1 }}。