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

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

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

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Перестаёт работать функция

Написал часть кода к игре, в данном коде фиксируется столкновения (пока просто через хиттест). При столкновении должны разлетаться брызги, всё работает первые где-то 5-10 раз как задумано, потом при столкновении вылетает лишь один объект. Не могу понять в чём проблема, т.к. в трейс выкидывает, что в массив добавлено при столкновении минимум 5 объектов, но видно лишь один.
п.с. посе столкновения я замедляю движение объектов и когда скорость достаточно мала, то останавливаю и изменяю альфу, когда альфа становится достаточно мала, то удаляю объекты из массива.

всё запихано в энтер фрейм, если функция не вызывается через другую, так что ниже в энтер фрейме больше функций, чем выведено, т.к. они сидят в другой части программы, просто не обращайте внимание
Код AS3:
addEventListener(Event.ENTER_FRAME, obh_fn);
function obh_fn(e: Event): void {
	mass_vihlop();
 
	vrag_1_fn();
	vrag_1_dvigenie_fn();
	fn_vistrel_vrag_1();
	boll_action();
	fn_obvodka();
	delet_boll();
	fn_hittest();
	fn_vzriv_speed();
}
var bah_Array: Array = new Array();
function fn_hittest(): void {
	var i: Number = vrag_1_Array.length;
	while (i--) {
		var j: Number = FireArray.length;
		while (j--) {
			var vr_1: vrag_1_mc = vrag_1_Array[i];
			var boll_st: boll_mc = FireArray[j];
			if (vr_1.hitTestObject(boll_st)) {
				fn_vzriv(boll_st.x, boll_st.y);
				FireArray.splice(j, 1);
				removeChild(boll_st);
 
			}
		}
	}
}
//взрывы, вызывается в fn_hittest
var vzriv_Array: Array = new Array();
var vzriv_torm_Array: Array = new Array(); // торможение брызг
function fn_vzriv(x: Number, y: Number): void {
 
	var ran: Number = Math.random() * 10;
	if (ran < 3) {
		ran += 2; //минимум брызг
	}
	var i: Number = 0;
	while (ran > i) {
		i++;
		var vzriv: vzriv_mc = new vzriv_mc();
		var j: Number = Math.random();
		vzriv.rotation = j * 360;
		vzriv.scaleX = j;
		vzriv.scaleY = j;
		vzriv.x = x;
		vzriv.y = y;
		vzriv_Array.push(vzriv);
		this.addChild(vzriv);
		var t: Number = 1;
		vzriv_torm_Array.push(t);
	}
}
var torm_vzriv: Number = 0.9;
var speed_vzriv: Number = 2;
 
function fn_vzriv_speed(): void {
	var i: Number = vzriv_Array.length;
	while (i--) {
		var vzriv: vzriv_mc = vzriv_Array[i];
		var Vx_vzriv: Number = speed_vzriv * Math.cos(vzriv.rotation * Math.PI / 180) * vzriv_torm_Array[i];
		var Vy_vzriv: Number = speed_vzriv * Math.sin(vzriv.rotation * Math.PI / 180) * vzriv_torm_Array[i];
		vzriv.x += Vx_vzriv;
		vzriv.y += Vy_vzriv;
		if (vzriv_torm_Array[i] > 0.1) {
			vzriv_torm_Array[i] -= 0.03;
		} else {
			vzriv_torm_Array[i] = 0;
			vzriv.alpha = vzriv.alpha * 0.97;
		}
		if (vzriv.alpha < 0.05) {
			removeChild(vzriv_Array[i]);
			vzriv_Array.splice(i, 1);
		}
	}
}

Старый 30.09.2014, 14:25
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 2  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
Код AS3:
       mass_vihlop();
 
	vrag_1_fn();
	vrag_1_dvigenie_fn();
	fn_vistrel_vrag_1();
	boll_action();
	fn_obvodka();
	delet_boll();
	fn_hittest();
	fn_vzriv_speed();
переводчик

Старый 30.09.2014, 14:25
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
потестил на малых скоростях, у меня в игре летают 5 корабликов, сначала работает на всех, а потом только попадание в 1 из 5 даёт необходимый результат, в остальные - данная проблема

Добавлено через 3 минуты
Gerbert что не так, я же писал, что копирую сразу из игры, конечно функций там больше будет заряжено - писал же, чисто для наглядности что бы было видно организация их вызова

Добавлено через 21 минуту
ну как всегда, просидел сутки, тупил, написал и сразу разобрался, забыл чистить массив со скоростями
так будет нормально работать, тему можно закрыть
Код AS3:
function fn_vzriv_speed(): void {
	var i: Number = vzriv_Array.length;
	while (i--) {
		var vzriv: vzriv_mc = vzriv_Array[i];
		var Vx_vzriv: Number = speed_vzriv * Math.cos(vzriv.rotation * Math.PI / 180) * vzriv_torm_Array[i];
		var Vy_vzriv: Number = speed_vzriv * Math.sin(vzriv.rotation * Math.PI / 180) * vzriv_torm_Array[i];
		vzriv.x += Vx_vzriv;
		vzriv.y += Vy_vzriv;
		if (vzriv_torm_Array[i] > 0.1) {
			vzriv_torm_Array[i] -= 0.03;
		} else {
			vzriv_torm_Array[i] = 0;
			vzriv.alpha = vzriv.alpha * 0.97;
		}
		if (vzriv.alpha < 0.05) {
			removeChild(vzriv_Array[i]);
			vzriv_Array.splice(i, 1);
			vzriv_torm_Array.splice(i,1);
		}
	}
}

Старый 30.09.2014, 14:50
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 4  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
Цитата:
Gerbert что не так, я же писал, что копирую сразу из игры, конечно функций там больше будет заряжено - писал же, чисто для наглядности что бы было видно организация их вызова
По ссылке на переводчик можно догадаться, что не стоит nazivat latinskie slova tak.

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

Регистрация: Jun 2014
Сообщений: 558
Gerbert на форумах иной тематики придираются к правописанию, а здесь как правильно называть. Вот честно, не ужели вместо того, что бы помочь в актуальной проблеме (теперь уже нет) вы тратите своё и моё время на ЭТО

Старый 30.09.2014, 18:10
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Так на помощь в исправлении кривого кода может потребоваться N времени, а дать совет писать грамотно - требуется 1 секунда. Что выгоднее отвечающему, если нет никакого профита от варианта 1 ? Одно дело когда ты помогая человеку сам разбираешься в каком то интересном движке или ставишь перед собой цель написать такую же программу...
__________________
Марк Tween

Старый 30.09.2014, 19:00
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
а здесь как правильно называть.
Вы не поверите, но это ОЧЕНЬ важно. Важнее даже правильного алгоритма.
__________________
Отряд Котовскага

Старый 01.10.2014, 00:21
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 8  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Котяра я когда учился на первом курсе, то мне ставили 2-ку за то что писал на паскале " if (a>b)" а не
"var t: Boolean;
if (t:=a>b)" я никогда не понимал, зачем плодить кучу переменных, засирать код, писать на неродном для себя языке и гордиться тем, что сам с трудом поймёшь свой код через пару месяцев, к тому же у этого препода ни одна задача, чуть сложнее a+b, не работала, приходилось всё самому переделывать и доводить до ума, зато нервы хорошо потрепала своими выкрутасами, в связи с этим у меня возникла аллергия на пустые советы, которые просто отнимают моё время. По этому считаю "не можешь или не желаешь помочь, просто иди дальше и не отнимай время у людей"

Старый 01.10.2014, 09:14
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
Котяра я когда учился на первом курсе, то мне ставили 2-ку за то что писал на паскале " if (a>b)" а не
"var t: Boolean;
if (t:=a>b)" я никогда не понимал, зачем плодить кучу переменных, засирать код, писать на неродном для себя языке и гордиться тем, что сам с трудом поймёшь свой код через пару месяцев, к тому же у этого препода ни одна задача, чуть сложнее a+b, не работала, приходилось всё самому переделывать и доводить до ума, зато нервы хорошо потрепала своими выкрутасами, в связи с этим у меня возникла аллергия на пустые советы, которые просто отнимают моё время. По этому считаю "не можешь или не желаешь помочь, просто иди дальше и не отнимай время у людей"
При таком подходе, вам лучше вообще не спрашивать советов на форуме, а разбираться со всеми проблемами самостоятельно, и не отнимать время у людей, которые будут вчитываться в этот г-код

Есть устоявшиеся конвенции написания кода, которым необходимо следовать, если хотите, чтобы вам помогали где-то, а не указывали как правильно писать названия переменных и методов. Для "себя" можно писать хоть ВоТтАк, а на форумах - по конвенциям. Иначе любая ваша тема, на любом форуме, опять приведет к тому же результату
__________________
Ко мне можно и нужно обращаться на ты)

Старый 01.10.2014, 00:32
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 10  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
Цитата:
По этому считаю "не можешь или не желаешь помочь, просто иди дальше и не отнимай время у людей"
Очень надеюсь, что люди, которые для Вас авторитеты, не последовают Вашему совету
и потратят свое драгоценное время, чтобы донести до Вас всю важность, того, чего Вы, надеюсь пока, неспособны понять.

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

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

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


 


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


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