Вот есть код. Вроде написан правильно. Логически все должно работать
Code
//сила гравитации
var grav = 1;
//начальная скорость прыжка
var jumpSpeed = -11.9;
//шаг по Х
var speedX = 5;
//шаг по Y
var speedY = 0;
//максимальная скорость падения
var maxSpeedY = 14;
//отображает состояние прыжка
var jump = false;
//отображает состояние удара
var shoot = false;
Key.addListener(this);
onKeyDown = function () {
//прыгаем
if (Key.isDown(Key.UP) && !jump && !shoot) {
jump = true;
speedY = jumpSpeed;
}
};
function stepHero() {
if (!shoot) {
//смещаемся влево/вправо
if (Key.isDown(Key.LEFT)) {
hero._xscale = -100;
hero._x -= (jump) ? speedX * .8 : speedX;
} else if (Key.isDown(Key.RIGHT)) {
hero._xscale = 100;
hero._x += (jump) ? speedX * .8 : speedX;
}
}
//применяем по цепочке: гравитация -> скорость -> _y
speedY += grav;
speedY = (speedY > maxSpeedY) ? maxSpeedY : speedY;
hero._y += speedY;
if(hero._y > groundY) {
hero._y = groundY;
speedY = 0;
jump = false;
}
if (!shoot) {
if (jump) {
//в позу полёта
hero.gotoAndStop(3);
} else {
if (oldX != hero._x) {
//если позиция по Х изменилась - в позу хотьбы
hero.gotoAndStop(2);
} else {
//иначе - по стойке смирно
hero.gotoAndStop(1);
}
}
}
oldX = hero._x;
}
onEnterFrame = function () {
stepHero();
};
//массив с платформами
var boxes = [];
//каждая платформа при старте вызывает эту функцию и передаёт себя как параметр
addBox = function (obj) {
boxes.push(obj);
}
//--------------------------------
//сила гравитации
var grav = 1;
//начальная скорость прыжка
var jumpSpeed = -11.9;
//шаг по Х
var speedX = 5;
//шаг по Y
var speedY = 0;
//максимальная скорость падения
var maxSpeedY = 14;
//половина ширины персонажа
var hhx = (hero.p1._x - hero.p3._x + hero.p1._width / 2 + hero.p3._width / 2) / 2;
//половина высоты персонажа
var hhy = (hero.p2._y - hero.p4._y + hero.p2._height / 2 + hero.p4._height / 2) / 2;
//отображает состояние прыжка
var jump = false;
//отображает состояние удара
var shoot = false;
Key.addListener(this);
onKeyDown = function () {
//прыгаем
if (Key.isDown(Key.UP) && !jump && !shoot) {
jump = true;
speedY = jumpSpeed;
}
//бъём
if (Key.isDown(Key.SPACE) && !jump && !shoot) {
shoot = true;
hero.gotoAndStop(1);
hero.man.body.gotoAndPlay(2);
}
};
function stepHero() {
if (!shoot) {
//смещаемся влево/вправо
if (Key.isDown(Key.LEFT)) {
hero._xscale = -100;
hero._x -= (jump) ? speedX * .8 : speedX;
} else if (Key.isDown(Key.RIGHT)) {
hero._xscale = 100;
hero._x += (jump) ? speedX * .8 : speedX;
}
}
//применяем по цепочке: гравитация -> скорость -> _y
speedY += grav;
speedY = (speedY > maxSpeedY) ? maxSpeedY : speedY;
hero._y += speedY;
//проверка на пересечение с платформами
checkHitPlatform();
//если закомментировать строку ниже, то можно будет свалиться с платформы
//и прыгнуть оттолкнувшись от воздуха. Этой строкой устраняем этоот глюк
jump = (speedY < 5 && speedY > 0)? true : jump;
if (!shoot) {
if (jump) {
//в позу полёта
hero.gotoAndStop(3);
} else {
if (oldX != hero._x) {
//если позиция по Х изменилась - в позу хотьбы
hero.gotoAndStop(2);
} else {
//иначе - по стойке смирно
hero.gotoAndStop(1);
}
}
}
oldX = hero._x;
}
checkHitPlatform = function(){
//перебираем все платформы и проверяем пересечение с персонажем с учётом того,
//в какую сторону он смотрит
var i = boxes.length;
while (i--) {
var curB = boxes[i];
if (curB.hitTest(hero.p1)) {
//контакт справа
if (hero._xscale > 0) {
hero._x = curB._x - curB._width / 2 - hhx;
} else {
hero._x = curB._x + curB._width / 2 + hhx;
}
} else if (curB.hitTest(hero.p2)) {
//контакт снизу
jump = false;
speedY = 0;
hero._y = curB._y - curB._height / 2 - hhy;
} else if (curB.hitTest(hero.p3)) {
//контакт слева
if (hero._xscale > 0) {
hero._x = curB._x + curB._width / 2 + hhx;
} else {
hero._x = curB._x - curB._width / 2 - hhx;
}
} else if (curB.hitTest(hero.p4)) {
//контакт сверху
speedY = 0; // как вариант: speedY *= -1;
hero._y = curB._y + curB._height / 2 + hhy;
}
}
}
onEnterFrame = function () {
stepHero();
};
Но тем не менее не работает
Вот исходник:
http://zalil.ru/upload/31666691
Буду рад вашей помощи. Изучаю ActionScript уже месяц... Пытаюсь все делать сам а к сожалению с частью программирования проблемы