Хорошо, я везде искал, и я такой же зеленый, как и они..
Я недавно начал играть с AS3, потому что я хочу изучить его, поэтому я начал создавать простой платформер.
Кажется, я знаю, в чем моя проблема, но поиск решения занял полтора часа.
Из того, что я могу исследовать, это вопрос расчета положения игрока/частоты кадров. Персонаж заходит слишком далеко, прежде чем программа вычисляет его положение относительно пола, и когда она, наконец, распознает, где он находится, она начинает перекалибровку, возвращая его в Ноль.
Моя особая проблема заключается в том, что все, кто создает учебные пособия и прочее, используют разные системы маркировки, и я не могу найти ничего, достаточно подходящего для этой конкретной проблемы в простом языке.
Поэтому, пожалуйста, простите меня за вопрос, но есть ли шанс, что кто-нибудь сможет проверить мой код и помочь мне определить, где что-то идет не так. Я чувствую, что это как-то связано с
if(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;
}
}
Любая помощь будет очень признательна. Я хочу учиться, но это сложно, когда я даже не знаю, что именно искать.. Большое спасибо!