我正在制作一个以口袋妖怪为主题的游戏,里面会有各种各样的迷你游戏。第一幕要求角色在两个平台上跳跃,一个在右边,另一个在左边,以到达一个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---------------------------------------------------------
因此,我希望解决的问题是:
任何帮助都是非常感谢的。谢谢。
发布于 2014-05-29 23:33:21
您遇到的问题是,isJumping
和jumpPower
同时负责两件事:
isJumping
控制玩家是否可以跳跃,以及是否应用了玩家的跳跃运动。jumpPower
控制玩家的跳跃运动,使他们像重力一样坠落。
也许有一种聪明的方法可以让这一切发挥作用,但我个人认为拥有单独的gravity
、isJumping
和jumpPower
变量更容易。
看起来在顶部已经有了一个gravity
变量,但是它似乎没有在其他地方使用,所以我建议:
gravity
添加到播放器的y速度,如果isJumping
为真,则每次更新。isJumping
签入update
替换为if (jumpPower < 0)
,或者只是在按下键盘时立即向播放器的y速度添加跳转功率。isJumping
设置为false,但如果他们向上移动,则设置jumpPower
,并将y速度移动到0
。https://stackoverflow.com/questions/23862610
复制相似问题