Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Обсуждение работ > Не сайты

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.09.2010, 22:44
mamtn вне форума Посмотреть профиль Отправить личное сообщение для mamtn Найти все сообщения от mamtn
  № 1  
Ответить с цитированием
mamtn
[+1.3 07.08.10]
[+1.3 19.10.14]

Регистрация: Jul 2009
Адрес: C-Петербург
Сообщений: 37
По умолчанию игра Танки в процессе, требуется помощь

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

Старый 12.09.2010, 23:19
zurkis вне форума Посмотреть профиль Отправить личное сообщение для zurkis Найти все сообщения от zurkis
  № 2  
Ответить с цитированием
zurkis
 
Аватар для zurkis

Регистрация: Nov 2008
Адрес: Атланта
Сообщений: 1,271
судя по всему тебе сюда:

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

или сюда:

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

как раз твой случай
__________________
Пока я жив, Вы горем обеспечены

Старый 13.09.2010, 11:22
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 3  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Баг:
Если выстрелить в танк, он взорвется и исчезнет. Если выстрелить в это же место еще раз, он появится.
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг


Последний раз редактировалось leofit; 13.09.2010 в 11:24.
Создать новую тему Ответ Часовой пояс GMT +4, время: 05:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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