Andrej
06.04.2011, 01:06
Доброго времени суток дорогие форумчане.Дело в том ,что AS 2 я не знаю,сразу учил с AS3.По одному примеру в интернете я решил попробовать сделать игру,но пример написан на AS2.В принципе все переделал как с мог.Но возникла такая проблема.До этого я использовал hitTestObject одного мувика с другим,например :
if (klip1.hitTestObject(klip2)) {то......}
В принципе и тут я переделал,но это очень километрово писать код для каждого блока.А в примере автор использует массив с которого передает данные как я понял.Вобщем я с таким пока не сталкивался прошу помощи.Теперь по порядку.У нас есть герой (hero),он прыгает бегает и так далее, с этим ясно.Далее мы содаем блоки для него.Автор примера создает прямоугольник,все блоки в нем, а в кадре прямоугольника пишет _parent.addBox(this);.Далее такой код AS2:
//половина ширины персонажа
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 boxes = [];
//каждая платформа при старте вызывает эту функцию и передаёт себя как параметр
addBox = function (obj) {
boxes.push(obj);
}
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;
}
}
}
Как в AS3 передать данные из этого прямоугольника.Спасибо.С уважением Андрей.
if (klip1.hitTestObject(klip2)) {то......}
В принципе и тут я переделал,но это очень километрово писать код для каждого блока.А в примере автор использует массив с которого передает данные как я понял.Вобщем я с таким пока не сталкивался прошу помощи.Теперь по порядку.У нас есть герой (hero),он прыгает бегает и так далее, с этим ясно.Далее мы содаем блоки для него.Автор примера создает прямоугольник,все блоки в нем, а в кадре прямоугольника пишет _parent.addBox(this);.Далее такой код AS2:
//половина ширины персонажа
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 boxes = [];
//каждая платформа при старте вызывает эту функцию и передаёт себя как параметр
addBox = function (obj) {
boxes.push(obj);
}
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;
}
}
}
Как в AS3 передать данные из этого прямоугольника.Спасибо.С уважением Андрей.