Описание игры Танки
В центре экрана – большой танк, который отстреливается от маленьких танков.
Он поворачивается за мышью и стреляет в то место, куда нажмем мышью.
В момент нажатия кнопки мыши очередная пуля загружается из библиотеки,
размещается под большим танком и летит по направлению к точке, где щелкнули мышкой.
Перед началом игры:
маленькие танки – 20 штук - помещаются в случайные места вдоль границ экрана, сначала они прозрачные. В каждый танк загружается одна пулька тоже прозрачная.
Объявляются массивы размером 20 элементов:
-Для хранения разности координат маленьких танков и большого танка
- по оси x массив dx
- по оси y массив dy
- Для хранения углов разворота маленьких танков по отношению к большому танку
-массив MasAngl
- Для хранения глобальных значений координат пулек (относительно _root):
- по оси x массив xPul,по оси y массив yPul
Движение маленьких танков
Движение происходит при смене кадров монтажной линейки каждого маленького танка.
В каждом кадре расстояния по осям координат между большим танком и каждым маленьким сокращаются на 1/200 их начального значения.
Стрельба маленьких танков
Т.к. пулька вложена в клип “маленький танк” –клип mt, то ее движение также будет в направлении к большому танку(?), значит угол можно не вычислять(?),
А чтобы пулька двигалась, нужно только, чтобы в каждом кадре приращение координат было больше, чем у маленького танка(?).
Так и сделала, но пулька летит куда хочет
Стрельба большого танка кажется, тоже глючит...
Помогите разобраться!
Программный код:
Код AS1/AS2:
//------Установка начальных значений------------------------------------------
spaceShip.swapDepths(9999);
speed = 10;
depth = 100;
num = 0;
nose = 50;
pr = 0;
MasXn = [];
MasYn = [];
MasAngl = [];
dx = [];
dy = [];
// Координаты пули относительно _root
xPul=[];
yPul=[];
var nameP:String="";
//--------Размещение маленьких танков перед боем -------------------------
for (num=0; num<20; num++) {
_root.attachMovie("mt", "mt"+num, num);
_root["mt"+num]._alpha = 0;
pr = Math.floor(Math.random()*4);
if (pr == 0) {
MasXn[num] = -13;
MasYn[num] = Math.floor(Math.random()*600);
}
if (pr == 1) {
MasXn[num] = 720;
MasYn[num] = Math.floor(Math.random()*600);
}
if (pr == 2) {
MasYn[num] = -13;
MasXn[num] = Math.floor(Math.random()*700);
}
if (pr == 3) {
MasYn[num] = 620;
MasXn[num] = Math.floor(Math.random()*700);
}
// Разворот маленьких танков на большой танк
_root["mt"+num]._x = MasXn[num];
_root["mt"+num]._y = MasYn[num];
dx[num] = MasXn[num]-spaceShip._x;
//Если маленький танк левее большого танка,dx<0.Если мал.танк правее большого, dx>0.
dy[num] = MasYn[num]-spaceShip._y;
// Если маленький танк выше большого танка,dy<0. Если мал.танк ниже большого, dy>0.
MasAngl[num] = Math.atan2(dy[num],dx[num]);
_root["mt"+num]._rotation = MasAngl[num]*180/Math.PI;
dx[num] = MasXn[num]-spaceShip._x;
dy[num] = MasYn[num]-spaceShip._y;
nameP = "pul"+num;
_root["mt"+num].attachMovie("pul","nameP",num);// загрузка пули из библиотеки
_root["mt"+num].nameP._alpha=0;
}
num = 0;
nameP="";
//----------------------------------------------------------------------------------------------------------------
_root.onEnterFrame = function() {
nextMt = getTimer()+Math.floor(Math.random()*90-2);
// Время, когда появится очередной маленький танк
if (getTimer()>=nextMt && num<=20) {
_root["mt"+num]._alpha = 100;
_root["mt"+num].nameP._alpha=100;
moveMt(num);
num++;
}
};
_root.onMouseMove = function() {
updateAfterEvent();
xdiff = _root._xmouse-spaceShip._x;
ydiff = _root._ymouse-spaceShip._y;
angle = Math.atan2(ydiff, xdiff);
angle = angle*180/Math.PI;
spaceShip._rotation = angle;
};
_root.onMouseDown = function() {
angle = spaceShip._rotation;
angle = angle*Math.PI/180;
depth++;
name = "projectile"+depth;
_root.attachMovie("projectile", name, depth);
_root[name]._x = spaceShip._x+nose*Math.cos(angle);
_root[name]._y = spaceShip._y+nose*Math.sin(angle);
_root[name].xmov = speed*Math.cos(angle);
_root[name].ymov = speed*Math.sin(angle);
_root[name].onEnterFrame = function() {
this._x += this.xmov;
this._y += this.ymov;
if (this._x<=0) {
//Пуля, улетевшая влево,становится невидимой
this._visible = 0;
}
if (this._x>=700) {
//Пуля, улетевшая вправо,становится невидимой
this._visible = 0;
}
if (this._y<=0) {
//Пуля, улетевшая вверх,становится невидимой
this._visible = 0;
}
if (this._y>=600) {
//Пуля, улетевшая вниз,становится невидимой
this._visible = 0;
}
for (var j = 0; j<20; j++) {
if (_root[name].hitTest(_root["mt"+j])) {
_root["mt"+j].nameP._alpha=0;
_root["mt"+j].play();
//trace(_root["mt"+j]._x);
dx[j] = 0; // Для остановки маленького танка
dy[j] = 0; // Для остановки маленького танка
_root[name]._alpha = 0; // Пуля станет прозрачной
_root[name].removeMovieClip();
}
}
};
};
function moveMt(num) {
_root["mt"+num].onEnterFrame = function() {
// Если dx<0, маленький танк будет двигаться вправо. Если dx>0, то влево.
_root["mt"+num]._x-=dx[num]/200;
// Если dy<0, маленький танк будет двигаться вверх. Если dy>0, то вверх.
_root["mt"+num]._y -=dy[num]/200;
// Перевод координат пули из локальных в глобальные
xPul[num]= _root["mt"+num]._x+ _root["mt"+num].nameP._x;
yPul[num]= _root["mt"+num]._y+ _root["mt"+num].nameP._y;
// Если пуля попадает в большой танк, слышится грохот и большой танк трясется и дымит
if (spaceShip.hitTest( xPul[num],yPul[num],true)) {
_root["mt"+num].nameP._alpha=0;
spaceShip.play();
}
d=Math.sqrt(dx[num]*dx[num]+dy[num]*dy[num]);
if(d<=400){ // Начало движения пульки
_root["mt"+num].nameP._x-=dx[num]/20;
_root["mt"+num].nameP._y-=dy[num]/20;
}
// Если 10 попаданий, танк взрывается
// Если маленький танк "въехал" в большой танк
if (spaceShip.hitTest(_root["mt"+num]._x, _root["mt"+num]._y, true)) {
this._alpha = 0;
// маленький танк становится прозрачным
spaceShip._alpha -= 5;
_root["mt"+num].removeMovieClip();
}
};
}
]