{{notification.text}}

MirGames

Wallhow
31.01.13 23:37
0
Ещё раз извиняюсь за такой глупый вопрос, но что-то не как не могу толком сообразить, просто теоретически представил как это сделать, а на практике...увы не работает...
Что мне требуется:
Требуется, по нажатию ЛКМ по спрайту, проверить его и при определённых условиях изменить в нем некоторые данные.
Вот как я это делаю:

[CodeBox]
#region - Поворот кристалов по касанию
bool tab=false;
if (mat.onPressed())
{
tab = true;
}

if(Intersect.IntersectRect(new Rect2D(mat.getTouchPos(),new Size(1,1)),diamond.Rect))//Проверяет если курсор наведен на спрайт
{
if (diamond.getDirection() == Diamond.DIAMOND_DIRECTION_LU && tab)
{
diamond.setDirection(Diamond.DIAMOND_DIRECTION_U);
diamond.setFrame(0);
tab = false;
}
if (diamond.getDirection() == Diamond.DIAMOND_DIRECTION_UR && mat.onPressed())
{
diamond.setDirection(Diamond.DIAMOND_DIRECTION_LU);
diamond.setFrame(7);
tab = false;
}
if (diamond.getDirection() == Diamond.DIAMOND_DIRECTION_U && mat.onPressed())
{
diamond.setDirection(Diamond.DIAMOND_DIRECTION_UR);
diamond.setFrame(1);
tab = false;
}


}

#endregion
[/CodeBox]

Фишка в чём, в том что при клике спрайт начинает нервно менятся... предполагаю что надо как-то после нажатия на него сделать некую задержку в опросе..
#1
Программир Всия Руси!
01.02.13 03:03
0
Правильно предполагаешь - сделай )
#2
Wallhow
01.02.13 15:47
0
Цитата(DRON @ 1.02.2013 - 00:03) [snapback]111142[/snapback]

Правильно предполагаешь - сделай )

Да вот в том-то и дело Андрей, задержек не тормозящих весь игровой цикл, я, что-то не могу придумать пока... :(
#3
phomm
01.02.13 22:59
0
Неплохо бы увидеть весь проект - для тестов, а то мало ли какие особенности у фреймворков/движков , что Вы используете.
Скорее всего у Вас стандартный бесконечный цикл работы приложения, как в большинстве движков, а Вы ориентируете на якобы "событие" клика, а события никакого нет - на каждой итерации Вы только получаете данные о текущем положении мыши, вот каждую итерацию и происходит изменение состояния а Вы при этом написали код, как будто для события.
#4
Wallhow
01.02.13 23:38
0
Цитата(phomm @ 1.02.2013 - 19:59) [snapback]111144[/snapback]

Неплохо бы увидеть весь проект - для тестов, а то мало ли какие особенности у фреймворков/движков , что Вы используете.
Скорее всего у Вас стандартный бесконечный цикл работы приложения, как в большинстве движков, а Вы ориентируете на якобы "событие" клика, а события никакого нет - на каждой итерации Вы только получаете данные о текущем положении мыши, вот каждую итерацию и происходит изменение состояния а Вы при этом написали код, как будто для события.

Спасибо, я уже разобрался)) Там оказывается всё настолько просто было, сегодня осенило)
#5
Wallhow
04.02.13 02:26
0
Снова я и снова глупый вопрос, тему создавать не стал новую напишу здесь

Суть проблемы
Есть частица которая при столкновение с алмазом меняет направление
Картинка 1

направление задается в самом алмазе с помощью спец. метода

и получается из него при помощи


но вот странность в том, что когда частичка после первого столкновения сталкивается ещё раз, то направление не меняется...

а если делать так то всё ок!



В чём же может быть проблема?
Отредактировано: 04.02.13 02:28
#6
phomm
04.02.13 09:12
0
Что говорит отладка ? Я бы ветку default для switch воткнул бы (можно с дебаг-сообщением, но проще самому продебажить) - возможно в сетдирекшн передаёте не (byte)1 - и нужная ветка не вызывается. Ещё есть некоторая вероятность, что само значение speedParicles неверно в тот момент, когда работает сетдирекшн. Некоторая вероятность, что сами рабочие поля меняются кем-то, даже "своими" между установкой и считыванием.

И потом, проясните ситуацию )) Вы на хна делаете или же на дгле - или это 2 разных проекта ?
#7
04.02.13 14:10
0
Насколько я вижу, getVelosity возвращает просто значение, которое рассчитывается в методе setDirection. Вот только вызова этого метода я не вижу, так что видимо VelocityD не пересчитывается при столкновении частицы с алмазом и естественно все частицы получают одну и ту же скорость.
#8
Wallhow
04.02.13 19:01
0
Цитата(Vga @ 4.02.2013 - 11:10) [snapback]111148[/snapback]

Насколько я вижу, getVelosity возвращает просто значение, которое рассчитывается в методе setDirection. Вот только вызова этого метода я не вижу, так что видимо VelocityD не пересчитывается при столкновении частицы с алмазом и естественно все частицы получают одну и ту же скорость.

setDirection вызывается чуть раньше при создание алмаза.
Но все ровно спасибо)

Цитата(phomm @ 4.02.2013 - 06:12) [snapback]111147[/snapback]

Что говорит отладка ? Я бы ветку default для switch воткнул бы (можно с дебаг-сообщением, но проще самому продебажить) - возможно в сетдирекшн передаёте не (byte)1 - и нужная ветка не вызывается. Ещё есть некоторая вероятность, что само значение speedParicles неверно в тот момент, когда работает сетдирекшн. Некоторая вероятность, что сами рабочие поля меняются кем-то, даже "своими" между установкой и считыванием.

И потом, проясните ситуацию )) Вы на хна делаете или же на дгле - или это 2 разных проекта ?

Это два разных проекта)
#9
Wallhow
04.02.13 19:23
0
После советов тут, решил ещё раз проверить а вызывается ли setDirection , и заметил интересный момент:
Суть такова, когда я сравниваю одну текстовую переменную с другой вторым способом(способ на картинке), то всё работает, а когда первым то нет... Не думал что есть разница..
Отредактировано: 04.02.13 19:23
#10
Wallhow
04.02.13 21:37
0
Не, ошибочка вышла, работает всё так же как и работало, криво, копаю дальше
Вот приложил видео,Video.rar

и ещё, вот так всё работает как надо...я уже и не знаю где может быть собака зарыта
Отредактировано: 04.02.13 21:58
#11
phomm
04.02.13 21:51
0
А остальные вопросы - религия не позволяет ответить ))) ?

И потом неужели секретище такое ) дали бы проект - его бы мигом мы потвикали )
Ну а коль секрет попробуйте выделить эту часть в небольшой проектик - для тестов - и Вам самому может удобнее будет тестить и нам спокойно можете дать , чтобы указать ошибку.

Ну и про дгле проект - чего не отвечаете-то ) ? тоже давайте посотрудничаем, мне как раз на чём то бы потестить надо сборки хедеров новые.
#12
Wallhow
04.02.13 22:01
0
Цитата(phomm @ 4.02.2013 - 18:51) [snapback]111152[/snapback]

А остальные вопросы - религия не позволяет ответить ))) ?

И потом неужели секретище такое ) дали бы проект - его бы мигом мы потвикали )
Ну а коль секрет попробуйте выделить эту часть в небольшой проектик - для тестов - и Вам самому может удобнее будет тестить и нам спокойно можете дать , чтобы указать ошибку.

Ну и про дгле проект - чего не отвечаете-то ) ? тоже давайте посотрудничаем, мне как раз на чём то бы потестить надо сборки хедеров новые.

Простите, на счёт дигл проекта, временно забросил это дело, на счёт сорцев, конечно не секрет, а какие остальные вопросы?:)))
#13
phomm
04.02.13 22:15
0
Остальные вопросы - точнее предположения , которые надо проверить в отладке, и моего поста №7 ведь Вы ответили только на вопрос про проекты среди них всех ))
#14
Wallhow
04.02.13 22:21
0
Цитата(phomm @ 4.02.2013 - 19:15) [snapback]111154[/snapback]

Остальные вопросы - точнее предположения , которые надо проверить в отладке, и моего поста №7 ведь Вы ответили только на вопрос про проекты среди них всех ))

Что говорит отладка ? вроде молчит
Я бы ветку default для switch воткнул бы : уже начинаю думать об этом.
А всё остальное вроде нормально...
#15
phomm
05.02.13 13:31
0
Ёклмнуфхцч, это был долгий и нудный дебаг.

Скажу вот что:
В таких дебрях без нормальной инкапсуляции (хотя всего-то килов 50 кода, правда, классов прилично) подобные мистические косяки будут возникать только чаще и чаще. Поэтому в топку паблик поля - запомните это. Только проперти!
Ещё хочется отметить некоторый оверхед в плане дублирования данных - массивы с партиклами - у левелмапа и у эмиттера (а сам эмиттер тоже у левелмапа), их размеры в виде всяких Maxparticles p.length тоже нифига не кошерно. Непонятный разнобой из позишенов и велоСитей у большинства сущностей - я долго вкуривал что куда, имхо, можно было и пообособленнее сделать.
Некоторые непонятки по всё той же инкапсуляции в методах - за апдейты/ отрисовки/смену свойств отвечают то контейнеры, то сами элементы - имхо, унификацию надо поднять, а то путаница.
Ну и чисто от себя совет - выверяйте англ слова, а то режут глаз всякие complIted particl continium veloSity parametRE

Ну а после нотаций )) долгожданный ответ.

в Emitter.start выкинуть
Код
P[i].Velocity.x = velocity[i].x;
P[i].Velocity.y = velocity[i].y;

и поставить
Код
P[i].setVelosity(velocity[i]);


У меня много раз мимо этого кода глаз пробегал, не замечая косяка. А суть проста - не надо использовать поле типа КЛАСС (public class Point2D) подразумевая операции по значению (Поэтому второй вариант решения - сделать поинт2д - структурой). Там очень хитрая грань когда по ссылке, а когда по значению работаете, неплохо бы расставить для себя всё в нужном порядке, прочитав пару статей по данной теме.
В довесок к инкапсуляции - надо бы пересмотреть все подобные операции, либо заменить тип на структуру.

Что интересно - решение проблемы стояло чрезвычайно далеко от направления в котором копали ТС , да и я вначале.

Хочется отметить, что вижу хороший потенциал проекта - и по активности автора и по заложенным принципам в коде. Есть и идея и графика и алгоритмически/технически всё вполне хорошо. Надо только идти вперёд и делать.

В чём и желаю большого успеха автору !
Отредактировано: 05.02.13 13:36
#16
Wallhow
05.02.13 18:31
0
Цитата(phomm @ 5.02.2013 - 10:31) [snapback]111156[/snapback]

Ёклмнуфхцч, это был долгий и нудный дебаг.

Скажу вот что:
В таких дебрях без нормальной инкапсуляции (хотя всего-то килов 50 кода, правда, классов прилично) подобные мистические косяки будут возникать только чаще и чаще. Поэтому в топку паблик поля - запомните это. Только проперти!
Ещё хочется отметить некоторый оверхед в плане дублирования данных - массивы с партиклами - у левелмапа и у эмиттера (а сам эмиттер тоже у левелмапа), их размеры в виде всяких Maxparticles p.length тоже нифига не кошерно. Непонятный разнобой из позишенов и велоСитей у большинства сущностей - я долго вкуривал что куда, имхо, можно было и пообособленнее сделать.
Некоторые непонятки по всё той же инкапсуляции в методах - за апдейты/ отрисовки/смену свойств отвечают то контейнеры, то сами элементы - имхо, унификацию надо поднять, а то путаница.
Ну и чисто от себя совет - выверяйте англ слова, а то режут глаз всякие complIted particl continium veloSity parametRE

Ну а после нотаций )) долгожданный ответ.

в Emitter.start выкинуть
Код
P[i].Velocity.x = velocity[i].x;
P[i].Velocity.y = velocity[i].y;

и поставить
Код
P[i].setVelosity(velocity[i]);


У меня много раз мимо этого кода глаз пробегал, не замечая косяка. А суть проста - не надо использовать поле типа КЛАСС (public class Point2D) подразумевая операции по значению (Поэтому второй вариант решения - сделать поинт2д - структурой). Там очень хитрая грань когда по ссылке, а когда по значению работаете, неплохо бы расставить для себя всё в нужном порядке, прочитав пару статей по данной теме.
В довесок к инкапсуляции - надо бы пересмотреть все подобные операции, либо заменить тип на структуру.

Что интересно - решение проблемы стояло чрезвычайно далеко от направления в котором копали ТС , да и я вначале.

Хочется отметить, что вижу хороший потенциал проекта - и по активности автора и по заложенным принципам в коде. Есть и идея и графика и алгоритмически/технически всё вполне хорошо. Надо только идти вперёд и делать.

В чём и желаю большого успеха автору !

Огромное спасибо за то что так, если можно так сказать, разжевали и в рот положили.
Все замечания конечно будут учтены и я думаю в дальнейшем таких ошибок совершать не буду.
на счет структур хотелось бы отметить, просто я когда-то начинал путь в игроделание с j2me, от туда и привычка делать всё классами. Да и из-за того, что проект собирался в дальнейшем портироваться на Андрюшу и из за не знания присутствуют ли там структуры, было решено всё же остановится на классах
P.s. ещё раз огромное спасибо, + извиняюсь за испорченные нервы при ковыряние моего кода)
#17
phomm
05.02.13 19:33
0
Я примерно так и подумал, что нужны именно классы. Поэтому первый вариант решения как раз фиксит озвученную проблему, оставляя поинт2д классом, однако - сложно судить вылезет ли впоследствии ещё какая заковыка - чего метод со структурой как раз потенциально решает на корню. Как поступить - решать Вам.

Насчет нервов - не беспокойтесь, интересная задачка размять моск от работы (втихаря) да и помочь собрату игроделу тем более, поспособствовать в разработке хорошего проекта - очень приятно само по себе )

Главное - не замораживайте, как проект на дгле )) , освещайте здесь разработку, вопросы там опять же, получайте фидбек - вот что главное, делать в своё удовольствие и двигаться вперёд. На то оно и мирг-коммьюнити )
Отредактировано: 05.02.13 19:34
#18
Wallhow
15.03.13 20:28
0
И так снова я, и снова вопрос не по теме( я кстати тут похоже один вопросы задаю :) ).
Ну так вот, вопрос заключается в следующем:
Есть массив объектов, у каждого объекта есть переменная bool типа, отвечающая за некое состояние, предположим жив объект или нет.
Так вот, мне требуется проверить массив объектов, на то чтобы их жизнь была равна true и если все объекты соответствуют true, то выполнить определённое действие..

Ну и вроде всё просто.. и даже догадки есть, но больше чем уверен слишком муторные(так как думал сделать массив состояний, но опять же, как я буду проверять его...)


Подумал и добавил:
Только что пришла мыслишка. Делаем переменную типа int, проверяем массив и каждый раз когда объект из массива будет "жив", прибавляем переменной единицу, а уже после проверяем, если эта переменная соответствует длине массива объектов, то выполняем какое-то действие.
Отредактировано: 15.03.13 20:33
#19
Dan
The One
15.03.13 21:01
0
[code]
bool final_state = true;
for (i = 0; i < ArrLength; i++) final_state = final_state & Arr[i]->state;
if (final_state) {
//тут ты делаешь то что нужно если все элемены массива "живы"
}
#20
Хранитель Флейма
16.03.13 13:58
0
У Дана код из разряда "учусь программировать, умею хелоуволд".

Код

using System.Linq;

------------

if (GameObjects.All(o => o.StillAlive))
{
    // Ну ты понел, да?
}

#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}