Вернуться   Дизайнерский форум » ДИЗАЙН И ГРАФИКА » Технологии Flash

Помогите исправить глюки во флеш игре

Обсуждение темы Помогите исправить глюки во флеш игре в разделе Технологии Flash, часть категории ДИЗАЙН И ГРАФИКА; Беда... Дело в том что когда соприкасаются два персонажа, и при прыжке одного из них возникает глюк - их разбрасывает за пределы уровня. ...


Закрытая тема
 
Опции темы
Старый 01.03.2012, 21:51   #1
Беда... Дело в том что когда соприкасаются два персонажа, и при прыжке одного из них возникает глюк - их разбрасывает за пределы уровня. Помогите кому не сложно, заранее спасибо.

//массив с платформами
var boxes = [];
//каждая платформа при старте вызывает эту функцию и передаёт себя как параметр
function addBox(obj) {
boxes.push(obj);
}

var grav = 0.75;
//начальная скорость прыжка
var jumpSpeed = -12;
//шаг по Х
var speedX = 5;
//шаг по Y
var speedY = 0;

//максимальная скорость падения
var maxSpeedY = 25;

var grav_2 = 0.75;
//начальная скорость прыжка
var jumpSpeed_2 = -11.9;
//шаг по Х
var speedX_2 = 5;
//шаг по Y
var speedY_2 = 0;

//максимальная скорость падения
var maxSpeedY_2 = 25;

//половина ширины персонажа
//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 hhx_2 = (hero_2.t1._x - hero_2.t3._x + hero_2.t1._width / 2 + hero_2.t3._width / 2) / 2;
//половина высоты персонажа
//var hhy_2 = (hero_2.t2._y - hero_2.t4._y + hero_2.t2._height / 2 + hero_2.t4._height / 2) / 2;

//отображает состояние прыжка
var jump = false;
//отображает состояние удара
var shoot = false;

//отображает состояние прыжка
var jump_2 = false;
//отображает состояние удара
var shoot_2 = false;

var p1camx
var p1camy
var p2camx
var p2camy

player1_mc.setMask(p1mask_mc)
player2_mc.setMask(p2mask_mc)
cameraRot = 0

p1x = _root.player1_mc.char1_mc._x
p1y = _root.player1_mc.char1_mc._y
p2x = _root.player2_mc.char2_mc._x
p2y = _root.player2_mc.char2_mc._y
split._yscale = 0

Key.addListener(this);
onKeyDown = function () {
//прыгаем
//if (Key.isDown(Key.UP) && !jump && !shoot) {
//jump = true;
//speedY = jumpSpeed;
//}
//if (Key.isDown(87) && !jump_2 && !shoot_2) {
//jump_2 = true;
//speedY_2 = jumpSpeed_2;
//}//87-w
//бъём
if (Key.isDown(77) && !jump && !shoot) {
shoot = true;
_root.player1_mc.char1_mc.gotoAndStop(4);
_root.player1_mc.char1_mc.body.gotoAndPlay(2);
}//32-space 188 - б
if (Key.isDown(86) && !jump_2 && !shoot_2) {
shoot_2 = true;
_root.player2_mc.char2_mc.gotoAndStop(4);
_root.player2_mc.char2_mc.body_2.gotoAndPlay(2);
_root.player1_mc.char2_mc.gotoAndStop(4);
_root.player1_mc.char2_mc.body_2.gotoAndPlay(2);
}//86-v
};

function stepHero() {
//смещение фона вместо персонажа
//_x = -(hero._x - 300);
//_y = -(hero._y - 400);
//смещение очков за персонажем
//ochki._x= hero._x -100;
//ochki._y= hero._y - 100;
/////
//смещение очков за персонажем
//ochki_2._x= hero_2._x - 100;
//ochki_2._y= hero_2._y - 100;
/////
if (!shoot) {
//смещаемся влево/вправо
if (Key.isDown(Key.LEFT)) {
_root.player1_mc.char1_mc._xscale = -100;
p1x -= (jump) ? speedX * 1 : speedX;
} else if (Key.isDown(Key.RIGHT)) {
_root.player1_mc.char1_mc._xscale = 100;
p1x += (jump) ? speedX * 1 : speedX;
}
}
if (!shoot_2) {
//смещаемся влево/вправо
if (Key.isDown(65)) {
_root.player2_mc.char2_mc._xscale = 27;
_root.player1_mc.char2_mc._xscale = 27;
p2x -= (jump_2) ? speedX_2 * 1 : speedX_2;

} else if (Key.isDown(68)) {
_root.player2_mc.char2_mc._xscale = -27;
_root.player1_mc.char2_mc._xscale = -27;
p2x += (jump_2) ? speedX_2 * 1 : speedX_2;
}//65-a 68-d
}
//применяем по цепочке: гравитация -> скорость -> _y
speedY += grav;
speedY = (speedY > maxSpeedY) ? maxSpeedY : speedY;
p1y += speedY;


speedY_2 += grav_2;
speedY_2 = (speedY_2 > maxSpeedY_2) ? maxSpeedY_2 : speedY_2;
p2y += speedY_2;
//проверка на пересечение с платформами
checkHitPlatform();
checkHitPlatform_2();

//if(p1y > groundY) {
//p1y = groundY;
//speedY = 0;
//jump = false;
//}

//if(p2y > groundY) {
//p2y = groundY;
//speedY_2 = 0;
//jump_2 = false;
//}

if (!shoot) {
if (jump) {
//в позу полёта
_root.player1_mc.char1_mc.gotoAndStop(3);
} else {
if (oldX != _root.player1_mc.char1_mc._x) {
//если позиция по Х изменилась - в позу хотьбы
_root.player1_mc.char1_mc.gotoAndStop(2);
} else {
//иначе - по стойке смирно
_root.player1_mc.char1_mc.gotoAndStop(1);
}
}

if (!shoot_2) {
if (jump_2) {
//в позу полёта
_root.player1_mc.char2_mc.gotoAndStop(3);
_root.player2_mc.char2_mc.gotoAndStop(3);
} else {
if (oldX_2 != _root.player2_mc.char2_mc._x) {
//если позиция по Х изменилась - в позу хотьбы
_root.player1_mc.char2_mc.gotoAndStop(2);
_root.player2_mc.char2_mc.gotoAndStop(2);
} else {
//иначе - по стойке смирно
_root.player1_mc.char2_mc.gotoAndStop(1);
_root.player2_mc.char2_mc.gotoAndStop(1);
}
}
}
oldX = _root.player1_mc.char1_mc._x;
oldX_2 = _root.player2_mc.char2_mc._x;
}
}

onEnterFrame = function () {

stepHero();

//if (Key.isDown(Key.LEFT)) { p1x -= 3 }
//if (Key.isDown(Key.RIGHT)) { p1x += 3 }
if (Key.isDown(Key.UP)&& !jump && !shoot) { jump = true;
speedY = jumpSpeed;
speedY += grav;
speedY = (speedY > maxSpeedY) ? maxSpeedY : speedY;
p1y += speedY;}
//if (Key.isDown(Key.DOWN)) { p1y += 3 }

// player 2
//if (Key.isDown(65)) { p2x -= 3 }
//if (Key.isDown(68)) { p2x += 3 }
if (Key.isDown(87)&& !jump_2 && !shoot_2) {
jump_2 = true;
speedY_2 = jumpSpeed_2;
speedY_2 += grav_2;
speedY_2 = (speedY_2 > maxSpeedY_2) ? maxSpeedY_2 : speedY_2;
p2y += speedY_2;
}


//if (Key.isDown(83)) { p2y += 3 }
// w = 87
// a = 65
// s = 83
// d = 68
distX = (p2x - p1x) * 720/1280
distY = (p2y - p1y)
distance = Math.sqrt((distX*distX)+(distY*distY))
cameraRot = (-Math.atan2(distX, distY)/(Math.PI/180))

//if (distance < 150) {

_root.player2_mc.char1_mc._x = _root.player1_mc.char1_mc._x = p1x
_root.player2_mc.char2_mc._x = _root.player1_mc.char2_mc._x = p2x
_root.player2_mc.char1_mc._y = _root.player1_mc.char1_mc._y = p1y
_root.player2_mc.char2_mc._y = _root.player1_mc.char2_mc._y = p2y



//player1_mc.char1_mc._x = player1_mc._x*-1 + 640
//player1_mc.char1_mc._y = player1_mc._y*-1 + 180
//player1_mc._x = player1_mc.char1_mc._x - 640
if (distance < 360) {
//cameraRot = 0
p1mask_mc._y = p2mask_mc._y = 720
p1mask_mc._rotation = 180
p2mask_mc._rotation = 0
p1camx = ((player1_mc.char1_mc._x + player2_mc.char2_mc._x)/2)-640
p1camy = ((player1_mc.char1_mc._y + player2_mc.char2_mc._y)/2)-360


if (split._yscale < 10) { split._yscale = 0 } else if (split._yscale > 90) { split._yscale = 90 } else if (split._yscale > 0) { split._yscale -= (100-split._yscale)/3 } else { split._yscale = 0 }
} else {
p1mask_mc._y = 360
p2mask_mc._y = 360
offsetX = 640
offsetY = 360

angle = (cameraRot)*Math.PI/180

ex = 0
ey = 180

ex2 = Math.cos(angle)*ex-Math.sin(angle)*ey
ey2 = Math.cos(angle)*ey+Math.sin(angle)*ex

p1camx = player1_mc.char1_mc._x-offsetX+(ex2 * (1280/720))
p1camy = player1_mc.char1_mc._y-offsetY+ey2
p2camx = player2_mc.char2_mc._x-offsetX-(ex2 * (1280/720))
p2camy = player2_mc.char2_mc._y-offsetY-ey2

if (Key.isDown(79)) { cameraRot -- }
if (Key.isDown(80)) { cameraRot ++ }

p1mask_mc._rotation = cameraRot + 180
p2mask_mc._rotation = cameraRot
if (split._yscale > 90) { split._yscale = 100 } else { split._yscale += (100 - split._yscale) / 5 }
}
split._rotation = cameraRot

player1_mc._x = p1camx/-1
player1_mc._y = p1camy/-1
player2_mc._x = p2camx/-1
player2_mc._y = p2camy/-1


}

function checkHitPlatform(){
//перебираем все платформы и проверяем пересечение с персонажем с учётом того,
//в какую сторону он смотрит
var i = boxes.length;
while (i--) {
var curB = boxes[i];
if (curB.hitTest(_root.player1_mc.char1_mc.p1)) {
//контакт справа
if (_root.player1_mc.char1_mc._xscale > 0) {
p1x = curB._x - curB._width / 2 - 25;
} else {
p1x = curB._x + curB._width / 2 + 25;
}
} else if (curB.hitTest(_root.player1_mc.char1_mc.p2)) {
//контакт снизу
jump = false;
speedY = 0;
p1y = curB._y - curB._height / 2 - 50;
} else if (curB.hitTest(_root.player1_mc.char1_mc.p3)) {
//контакт слева
if (_root.player1_mc.char1_mc._xscale > 0) {
p1x = curB._x + curB._width / 2 + 65;
} else {
p1x = curB._x - curB._width / 2 - 65;
}
} else if (curB.hitTest(_root.player1_mc.char1_mc.p4)) {
//контакт сверху
speedY = 0; // как вариант:
//speedY *= -1;
p1y = curB._y + curB._height / 2 + 25;
if(curB.speed > 0) {
p1y += curB.speed;
}
}
}
}


function checkHitPlatform_2(){
//перебираем все платформы и проверяем пересечение с персонажем с учётом того,
//в какую сторону он смотрит
var i = boxes.length;
while (i--) {
var curB = boxes[i];
if (curB.hitTest(_root.player2_mc.char2_mc.t1)) {
//контакт справа
if (_root.player2_mc.char2_mc._xscale > 0) {
p2x = curB._x - curB._width / 2 - 60;
} else {
p2x = curB._x + curB._width / 2 + 60;
}
} else if (curB.hitTest(_root.player2_mc.char2_mc.t2)) {
//контакт снизу
jump_2 = false;
speedY_2 = 0;
p2y = curB._y - curB._height / 2 - 60;
} else if (curB.hitTest(_root.player2_mc.char2_mc.t3)) {
//контакт слева
if (_root.player2_mc.char2_mc._xscale > 0) {
p2x = curB._x + curB._width / 2 + 40;
} else {
p2x = curB._x - curB._width / 2 - 40;
}
} else if (curB.hitTest(_root.player2_mc.char2_mc.t4)) {
//контакт сверху
speedY_2 = 0; // как вариант: speedY *= -1;
p2y = curB._y + curB._height / 2 + 60;
if(curB.speed > 0) {
p2y += curB.speed;
}
}
}
};
 
Старый 01.03.2012, 21:51
Ссылки
Старый 22.04.2012, 04:46   #2
Обычно русские разработчики делают так: Это не баг, это ФИЧА!
 
Старый 22.04.2012, 05:18   #3
bratmaxim,
многа букаф, вряд ли кто то будет разбираться...

Добавлено через 15 секунд

bratmaxim,
многа букаф, вряд ли кто то будет разбираться...

Последний раз редактировалось MaxSheff; 22.04.2012 в 05:18.. Причина: Добавлено сообщение
 
Старый 22.04.2012, 11:23   #4
Актуален ли флеш?

Если Adobe уже отказывается от него, специально для перевода флеш сайтов в HTML5 + JavaScript сделали редактор ...
 
Старый 23.04.2012, 02:37   #5
maxefect, пока флеш актуален. Adobe отказывается не от флеш, а от разработки его под мобильные устройства. У флеша в любом случае будет своя ниша на рынке, взять хотя бы флеш игры, которые имеют огромную популярность)
 
Старый 23.04.2012, 15:17   #6
Ну, а как кто там? Vimeo перевела свой плеер на HTML5
 
Старый 24.04.2012, 01:01   #7
maxefect, не хочу спорить на эту тему, все равно что спорить, что лучше, Win или Linux, PC или Mac, 3D Max или Maya=)
 
Старый 24.04.2012, 14:42   #8
Да =)

Но ведь, например, ASP эволюционировал в ASP.Net

Почему бы и "Флешу" не сгинуть, а на его месте поставить, что то по новее и по круче! Одно я знаю: в IT все стремительно, быстро развивается - так что кто его знает, что придумают еще ...
 
Старый 25.04.2012, 02:59   #9
Может быть, может быть. Глядишь и html 5 сгинет... приходится подстраиваться под время
 
Старый 25.04.2012, 14:27   #10
Хм... HTML5 еще даже не везде есть
Он только развивается, хотя давно придуман! Но к 2013 году по редакции группы разработчиков на HTML5 уже должны полностью перейти
 
Старый 25.04.2012, 14:27
Закрытая тема

Метки
flash платформер глюки




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в PHP-скрипте, помогите исправить Dead_Angel ASP, Perl, PHP и MySQL 6 24.06.2011 00:39
Некорректно работает код. Помогите исправить! denicko HTML, CSS, JavaScript 5 20.10.2010 16:06
Глюки с table height 100%. И у вложенной, и у основной. Помогите. volFernion HTML, CSS, JavaScript 2 15.09.2009 18:05
Помогите исправить глюк bumbarashka HTML, CSS, JavaScript 0 29.01.2007 00:48
Помогите отловить глюки в игре puas Технологии Flash 4 11.10.2004 16:23


Текущее время: 15:27. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум