Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Не сайты (http://www.flasher.ru/forum/forumdisplay.php?f=82)
-   -   игра Танки в процессе, требуется помощь (http://www.flasher.ru/forum/showthread.php?t=144454)

mamtn 12.09.2010 22:44

игра Танки в процессе, требуется помощь
 
Вложений: 1
Описание игры Танки
В центре экрана – большой танк, который отстреливается от маленьких танков.
Он поворачивается за мышью и стреляет в то место, куда нажмем мышью.
В момент нажатия кнопки мыши очередная пуля загружается из библиотеки,
размещается под большим танком и летит по направлению к точке, где щелкнули мышкой.
Перед началом игры:
маленькие танки – 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();
                }
        };
}

]

zurkis 12.09.2010 23:19

судя по всему тебе сюда:

http://xitri.com/2009/03/19/crimsonl...ionscript.html

или сюда:

http://xitri.com/2009/02/27/vospomin...ie-na-cel.html

как раз твой случай

leofit 13.09.2010 11:22

Баг:
Если выстрелить в танк, он взорвется и исчезнет. Если выстрелить в это же место еще раз, он появится.


Часовой пояс GMT +4, время: 13:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.