Среда, 06 Ноября 2024, 03:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Платформер
ElDarcoДата: Четверг, 08 Сентября 2011, 14:08 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Вот есть код. Вроде написан правильно. Логически все должно работать

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();
};


Но тем не менее не работает sad
Вот исходник:
http://zalil.ru/upload/31666691

Буду рад вашей помощи. Изучаю ActionScript уже месяц... Пытаюсь все делать сам а к сожалению с частью программирования проблемы smile
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг