![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Написал часть кода к игре, в данном коде фиксируется столкновения (пока просто через хиттест). При столкновении должны разлетаться брызги, всё работает первые где-то 5-10 раз как задумано, потом при столкновении вылетает лишь один объект. Не могу понять в чём проблема, т.к. в трейс выкидывает, что в массив добавлено при столкновении минимум 5 объектов, но видно лишь один.
п.с. посе столкновения я замедляю движение объектов и когда скорость достаточно мала, то останавливаю и изменяю альфу, когда альфа становится достаточно мала, то удаляю объекты из массива. всё запихано в энтер фрейм, если функция не вызывается через другую, так что ниже в энтер фрейме больше функций, чем выведено, т.к. они сидят в другой части программы, просто не обращайте внимание 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); } } } |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
mass_vihlop(); vrag_1_fn(); vrag_1_dvigenie_fn(); fn_vistrel_vrag_1(); boll_action(); fn_obvodka(); delet_boll(); fn_hittest(); fn_vzriv_speed(); |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
потестил на малых скоростях, у меня в игре летают 5 корабликов, сначала работает на всех, а потом только попадание в 1 из 5 даёт необходимый результат, в остальные - данная проблема
Добавлено через 3 минуты Gerbert что не так, я же писал, что копирую сразу из игры, конечно функций там больше будет заряжено - писал же, чисто для наглядности что бы было видно организация их вызова Добавлено через 21 минуту ну как всегда, просидел сутки, тупил, написал и сразу разобрался, забыл чистить массив со скоростями так будет нормально работать, тему можно закрыть 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); } } } |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
Цитата:
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Gerbert на форумах иной тематики придираются к правописанию, а здесь как правильно называть. Вот честно, не ужели вместо того, что бы помочь в актуальной проблеме (теперь уже нет) вы тратите своё и моё время на ЭТО
|
|
|||||
|
Так на помощь в исправлении кривого кода может потребоваться N времени, а дать совет писать грамотно - требуется 1 секунда. Что выгоднее отвечающему, если нет никакого профита от варианта 1 ?
Одно дело когда ты помогая человеку сам разбираешься в каком то интересном движке или ставишь перед собой цель написать такую же программу...
__________________
Марк Tween |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Котяра я когда учился на первом курсе, то мне ставили 2-ку за то что писал на паскале " if (a>b)" а не
"var t: Boolean; if (t:=a>b)" я никогда не понимал, зачем плодить кучу переменных, засирать код, писать на неродном для себя языке и гордиться тем, что сам с трудом поймёшь свой код через пару месяцев, к тому же у этого препода ни одна задача, чуть сложнее a+b, не работала, приходилось всё самому переделывать и доводить до ума, зато нервы хорошо потрепала своими выкрутасами, в связи с этим у меня возникла аллергия на пустые советы, которые просто отнимают моё время. По этому считаю "не можешь или не желаешь помочь, просто иди дальше и не отнимай время у людей" |
|
|||||
|
Цитата:
Есть устоявшиеся конвенции написания кода, которым необходимо следовать, если хотите, чтобы вам помогали где-то, а не указывали как правильно писать названия переменных и методов. Для "себя" можно писать хоть ВоТтАк, а на форумах - по конвенциям. Иначе любая ваша тема, на любом форуме, опять приведет к тому же результату
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
Цитата:
и потратят свое драгоценное время, чтобы донести до Вас всю важность, того, чего Вы, надеюсь пока, неспособны понять. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|