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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.11.2008, 14:16
Agent007 вне форума Посмотреть профиль Отправить личное сообщение для Agent007 Найти все сообщения от Agent007
  № 1  
Ответить с цитированием
Agent007

Регистрация: May 2006
Сообщений: 33
По умолчанию Проверка HitTest

Здравствуйте, помогите пожалуйста разобраться
есть класс выстрела
Код:
class Vistrel {
//Propertis
var att_mc:String;
var cel_mc:MovieClip;
var speed_vis:Number;
private var __pulanum:Number;
var value_tan_krot:Number;
var pula:MovieClip;
//Propertis

function Vistrel(p_att_mc:String, p_cel_mc:MovieClip, p_speed_vis:Number, p_pulanum:Number) { 
	this.__pulanum = p_pulanum
	att_mc = p_att_mc
	cel_mc = p_cel_mc

	_root.attachMovie(att_mc, att_mc+this.__pulanum, _root.getNextHighestDepth(), {_x:cel_mc._x, _y:cel_mc._y});
	
	pula = _root[att_mc+this.__pulanum]
	pula._rotation = cel_mc._rotation;
	pula.value_tan_krot = cel_mc._rotation;
	pula.speed_vis = p_speed_vis
	pula.onEnterFrame = function() {
	this._x -= Math.sin(Math.PI/180*(180-this.value_tan_krot))* this.speed_vis;
	this._y -= Math.cos(Math.PI/180*(180-this.value_tan_krot))* this.speed_vis;
	}
}
public function get pulanum():Number {
        return this.__pulanum;
    }
public function set pulanum(value:Number):Void {
        this.__pulanum = value;
    }


}
И во флешки

Код:
var my_array:Array = new Array();
var my_pula:MovieClip = new MovieClip;

for (var i:Number = 0; i<5; i++) {
my_array.push (_root.attachMovie('monst', 'monst'+i, _root.getNextHighestDepth(), {_x:(150*i)+50, _y:50}));
}

var mouseListener:Object = new Object(); 
mouseListener.onMouseDown = function() {
var vistrel:Vistrel = new Vistrel("pula", bash, 15, _root.getNextHighestDepth());
my_pula = vistrel.pula
////////////////////////////////////////////
_root.onEnterFrame = function() {
	len = my_array.length
	for (var j:Number = 0; j<len; j++) {
	if (my_pula.hitTest(my_array[j])) {
		vistrel.pula.removeMovieClip();
		my_array[j].removeMovieClip();
		delete this;
		my_array.sort();
		my_array.shift();
    }
	}
}
////////////////////////////////////////////
}

mouseListener.onMouseMove = function() { 
	radians = Math.atan2 (_xmouse - bash._x, _ymouse - bash._y); 
	grad = -radians * 180 / Math.PI; 
	bash._rotation = grad; 
    updateAfterEvent(); 
};
Mouse.addListener(mouseListener);
Проблема в следущем при попадании пули в цель все замечательно отрабатывает, но если выпустить две пули подряд то срабатывает последняя, почему и как это побороть? Подскажите пожалуйста
Вложения
Тип файла: rar vistr.rar (6.9 Кб, 60 просмотров)

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

Регистрация: Oct 2007
Сообщений: 100
Отправить сообщение для Валиант с помощью ICQ
проблема в этом
Код AS1/AS2:
my_pula = vistrel.pula
Возможно нужно использовать массив

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

Регистрация: May 2006
Сообщений: 33
Сделал так:
Код:
var my_monstr_array:Array = new Array();
var my_pula_array:Array = new Array();
var my_pula:MovieClip = new MovieClip;

for (var i:Number = 0; i<5; i++) {
my_monstr_array.push(_root.attachMovie('monst', 'monst'+i, _root.getNextHighestDepth(), {_x:(150*i)+50, _y:50}));
}

var mouseListener:Object = new Object(); 
mouseListener.onMouseDown = function() {
var vistrel:Vistrel = new Vistrel("pula", bash, 15, _root.getNextHighestDepth());
my_pula = vistrel.pula
my_pula_array.push (my_pula)

////////////////////////////////////////////
_root.onEnterFrame = function() {
len =  my_monstr_array.length
len2 = my_pula_array.length
	for (var g:Number = 0; g<len; g++) {
		for (var j:Number = 0; j<len2; j++) {
			if (my_pula_array[j].hitTest(my_monstr_array[g])) {
				my_pula_array[j].removeMovieClip();
				my_monstr_array[g].removeMovieClip();
				delete my_monstr_array [g];
				delete my_pula_array[j];
				my_pula_array.sort();
				my_pula_array.pop();
				my_monstr_array.sort();
				my_monstr_array.pop();
				trace ("pula " + my_pula_array.length + " - " + "monster " + my_monstr_array.length)
			}
		}
	}
	for (var f:Number = 0; f<len2; f++) {
		if (my_pula_array[f].hitTest(_root.kr_top)) {
				my_pula_array[f].removeMovieClip();
				delete this;
				my_pula_array.sort();
				my_pula_array.shift();
				trace ("pula " + my_pula_array.length + " - " + "monster " + my_monstr_array.length)
			}
	}
}
////////////////////////////////////////////
}

mouseListener.onMouseMove = function() { 
	radians = Math.atan2 (_xmouse - bash._x, _ymouse - bash._y); 
	grad = -radians * 180 / Math.PI; 
	bash._rotation = grad; 
    updateAfterEvent(); 
};
Mouse.addListener(mouseListener);
Ох, чувствую перемудрил очень сильно

Старый 12.11.2008, 15:34
Валиант вне форума Посмотреть профиль Отправить личное сообщение для Валиант Найти все сообщения от Валиант
  № 4  
Ответить с цитированием
Валиант
 
Аватар для Валиант

Регистрация: Oct 2007
Сообщений: 100
Отправить сообщение для Валиант с помощью ICQ
Код AS1/AS2:
var my_array:Array = new Array();
var my_pula:MovieClip = new MovieClip;
var id:Number = 0;
for (var i:Number = 0; i<5; i++) {
	my_array.push (_root.attachMovie('monst', 'monst'+i, _root.getNextHighestDepth(), {_x:(150*i)+50, _y:50}));
}
var mouseListener:Object = new Object(); 
mouseListener.onMouseDown = function() {
	var vistrel:Vistrel = new Vistrel("pula", bash, 15, _root.getNextHighestDepth());
	id++;
	my_pula[id] = vistrel.pula
	len = my_array.length	
	_root.onEnterFrame = function() {
		for (ii:Number=0;ii<id;ii++){
			for (var j:Number = 0; j<len; j++) {
				if (my_pula[ii+1].hitTest(my_array[j])) {
				my_pula[ii+1].removeMovieClip();my_array[j].removeMovieClip();
				delete this;
				my_array.sort();my_array.shift();
			}
		}
	}
}
}
mouseListener.onMouseMove = function() { 
	radians = Math.atan2 (_xmouse - bash._x, _ymouse - bash._y); 
	grad = -radians * 180 / Math.PI; 
	bash._rotation = grad; 
    updateAfterEvent(); 
};
Mouse.addListener(mouseListener);

Старый 12.11.2008, 15:38
Agent007 вне форума Посмотреть профиль Отправить личное сообщение для Agent007 Найти все сообщения от Agent007
  № 5  
Ответить с цитированием
Agent007

Регистрация: May 2006
Сообщений: 33
Валиант, спасибо большое за помощь, то что нужно))

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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