Wellp,我到處找,我爲綠色,因爲他們來此..AS3碰撞檢測 - 跳躍的字符推透過落地
我最近開始使用AS3玩,因爲我想學習它,所以我開始建立一個簡單的一些平臺成交。
我想我知道我的問題是,但找到解決方案已經哈哈德半。
據我考證,這是球員位置計算/幀率的問題。在程序計算他的位置和地面之間的關係之前,角色已經走得太遠了,當它最終確認了他的位置時,它開始重新校準,使他回到零點。
我的特別問題是每個製作教程和材料的人都使用不同的標籤系統,我無法找到足夠適應平原語言這個特殊問題的任何東西。
所以請原諒我的問題,但有沒有人有機會查看我的代碼,並幫助我發現問題出在哪裏。如果(downBumping)位,我覺得它與
有關,但我正在努力弄清楚要改變什麼以及如何改變。 :\
下面的代碼:
import flash.geom.Point;
import flash.events.KeyboardEvent;
import flash.events.Event;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(Event.ENTER_FRAME, loop);
var scrollX:Number = 0;
var scrollY:Number = 0;
var xSpeed:Number = 0;
var ySpeed:Number = 0;
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var upPressed:Boolean = false;
var downPressed:Boolean = false;
var leftBumping:Boolean = false;
var rightBumping:Boolean = false;
var upBumping:Boolean = false;
var downBumping:Boolean = false;
var leftBumpPoint:Point = new Point(-62, 40);
var rightBumpPoint:Point = new Point(62, 40);
var upBumpPoint:Point = new Point(0, -83);
var downBumpPoint:Point = new Point(0, 80);
var animationState:String = "idle";
class Player extends player {
var speedConstant:int = 4;
var friction:Number = .75;
var maxSpeedConstant:Number = 18;
var gravityConstant:Number = 16;
var jumpConstant:Number = -180;
}
function loop(e:Event):void{
if(back.collisions.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)){
trace("my butt!!");
leftBumping = true;
} else {
leftBumping = false;
}
if(back.collisions.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)){
trace("my face!!");
rightBumping = true;
} else {
rightBumping = false;
}
if(back.collisions.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)){
trace("my head!!");
upBumping = true;
} else {
upBumping = false;
}
if(back.collisions.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)){
trace("my feet!");
downBumping = true;
} else {
downBumping = false;
}
//speed mechanics
if(leftPressed){
xSpeed -= speedConstant;
player.scaleX = -1;
} else if(rightPressed){
xSpeed += speedConstant;
player.scaleX = 1;
}
if(leftBumping){
if(xSpeed < 0){
xSpeed *= -0.5;
}
}
if(rightBumping){
if(xSpeed > 0){
xSpeed *= -0.5;
}
}
if(upBumping){
if(ySpeed < 0){
ySpeed *= -0.5;
}
}
if(downBumping){
if(ySpeed > 0){
ySpeed *= -.19;
}
if(upPressed){ //and if we're pressing UP
ySpeed = jumpConstant; //set y speed to jump constant
}
} else {//if we are not touching the floor
ySpeed += gravityConstant; //accelerate downwards
}
if(xSpeed > maxSpeedConstant){
xSpeed = maxSpeedConstant;
} else if(xSpeed < (maxSpeedConstant * -1)){
xSpeed = (maxSpeedConstant * -1);
}
xSpeed *= friction;
ySpeed *= friction;
if(Math.abs(xSpeed) < 0.5){
xSpeed = 0;
}
scrollX -= xSpeed;
scrollY -= ySpeed;
back.x = scrollX;
back.y = scrollY;
if((leftPressed || rightPressed || xSpeed > speedConstant || xSpeed < speedConstant *-1) && downBumping){
animationState = "walk";
}else if(downBumping){
animationState = "idle";
}
if(player.currentLabel !=animationState){
player.gotoAndStop(animationState)
}
}
function keyDownHandler(e:KeyboardEvent):void{
if(e.keyCode == Keyboard.LEFT){
leftPressed = true;
} else if(e.keyCode == Keyboard.RIGHT){
rightPressed = true;
} else if(e.keyCode == Keyboard.UP){
upPressed = true;
} else if(e.keyCode == Keyboard.DOWN){
downPressed = true;
}
}
function keyUpHandler(e:KeyboardEvent):void{
if(e.keyCode == Keyboard.LEFT){
leftPressed = false;
} else if(e.keyCode == Keyboard.RIGHT){
rightPressed = false;
} else if(e.keyCode == Keyboard.UP){
upPressed = false;
} else if(e.keyCode == Keyboard.DOWN){
downPressed = false;
}
}
任何幫助,將這樣非常讚賞。我想學習,但是當我甚至不知道究竟要尋找什麼時,很難。非常感謝!