Вопросы товарища Likantrop'а (3) - Проблема - решение. GML и прочее. - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 10«12345910»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы товарища Likantrop'а (Вопросы серьезные,... дважды! xD)
Вопросы товарища Likantrop'а
WertyXBOCT Дата: Понедельник, 24.08.2009, 15:11 | Сообщение # 41
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Likantrop, верхний икс и игрек всегда меньше нижних.
X1 = min(x0,x1);
Y1 = min(y0,y1);
X2 = max(x0,x1);
Y2 = max(y0,y1);


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Понедельник, 24.08.2009, 15:40 | Сообщение # 42
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
Quote (WertyXBOCT)
Likantrop, верхний икс и игрек всегда меньше нижних. X1 = min(x0,x1); Y1 = min(y0,y1); X2 = max(x0,x1); Y2 = max(y0,y1);

извини, не совсем понял тебя.
сейчас поясню что нужно...
вот нашел я два нужных игрека... но я не знаю, какой икс соответсвует игреку...
Поэтому глюки вылазят...Я на нужных координатах отрисовывают примитив...
Хм...Может попробовать использовать сетку?
 
Ninja Дата: Понедельник, 24.08.2009, 15:43 | Сообщение # 43
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
забей x и y всех точек в двумерный массив т.е. к примеру a[0,0]=x1;a[0,1]=y1 и т.д. потом вместе с максимумами храни индекс в массиве.


Oh, my God! You kill Kenny! You bastard!
 
WertyXBOCT Дата: Понедельник, 24.08.2009, 15:58 | Сообщение # 44
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Даже проще.
Создай мап. map_x = ds_map_create();
внеси в мап значения, где в качестве ключа используй значение элемента по которому собираешься сортировать(например по Y), под значением храни X. Затем возьми первые два ключа в мапе, это будут самые большие(или меньшие, если меньшие бери самые последние) значения, ключ узнать можно, можно узнать и значения. Ч.Т.Н.айти


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Понедельник, 24.08.2009, 16:17 | Сообщение # 45
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
Эм...В справке так таинственно написано...
Карты можно по убыванию/возрастанию распологать или
Quote (WertyXBOCT)
Затем возьми первые два ключа в мапе, это будут самые большие(или меньшие, если меньшие бери самые последние) значения

они сами располагаются как нужно? о_О
 
WertyXBOCT Дата: Понедельник, 24.08.2009, 16:19 | Сообщение # 46
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Они автоматически сортируются.
Maps maintain such pairs, sorted by key


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Понедельник, 24.08.2009, 16:33 | Сообщение # 47
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
Блин, что-то никак не пойму принцип их работы...
Code
map_x = ds_map_create();
ds_map_add(map_x,y1-yi,x1-xi);
ds_map_add(map_x,y2-yi,x2-xi);
ds_map_add(map_x,y1+yi,x1+xi);
ds_map_add(map_x,y2+yi,x2+xi);
val0=ds_map_find_value(map_x,0);
val1=ds_map_find_value(map_x,1);
ds_map_destroy(map_x);

ds_map_find_value - тут под параметром key что указывать? Номер, как сейчас?

 
WertyXBOCT Дата: Понедельник, 24.08.2009, 17:00 | Сообщение # 48
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
ds_map_find_value(mapname,KEY);
Ты ключ должен указать. Функция не та которую я рекомендовал тебе использовать. С помощью этой фукции ты узнаешь значение хранящееся под ключом. Верная функция будет: ds_map_find_first(id); Где id это map_x;
Теперь смотри как должно быть:
val0=ds_map_find_value(map_x,ds_map_find_first(map_x));
val1=ds_map_find_value(map_x,ds_map_find_next(map_x,ds_map_find_first(map_x)));


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Понедельник, 24.08.2009, 17:07 | Сообщение # 49
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
Quote (WertyXBOCT)
val0=ds_map_find_value(map_x,ds_map_find_first(map_x)); val1=ds_map_find_value(map_x,ds_map_find_next(map_x,ds_map_find_first(map_x)));

val0 и val1 - это мы получаем значения х при наибольших у?
а как получить значение ключа? то есть у, который будет нашим иксам соответствовать?
 
WertyXBOCT Дата: Понедельник, 24.08.2009, 17:28 | Сообщение # 50
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Прикинь, попутал с ds_queue_priority. Меня как раз в мапах и бесит что ключ узнать нельзя. Используй их.

Добавлено (24.08.2009, 17:28)
---------------------------------------------

Code
map_x = ds_priority_create();
ds_priority_add(map_x,x1-xi,y1-yi);  
ds_priority_add(map_x,x2-xi,y2-yi);  
ds_priority_add(map_x,x1+xi,y1+yi);  
ds_priority_add(map_x,x2+xi,y2+yi);  
X0=ds_priority_find_max(map_x);
Y0=ds_priority_find_priority(ds_priority_delete_max(map_x));
X1=ds_priority_find_max(map_x);
Y1=ds_priority_find_priority(ds_priority_delete_max(map_x));
ds_priority_destroy(map_x);


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Понедельник, 24.08.2009, 20:59 | Сообщение # 51
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
Мм, немного надо код изменить, чтоб работал:
Code
map_x = ds_priority_create();  
ds_priority_add(map_x,x1-xi,y1-yi);   
ds_priority_add(map_x,x2-xi,y2-yi);   
ds_priority_add(map_x,x1+xi,y1+yi);   
ds_priority_add(map_x,x2+xi,y2+yi);   
X0=ds_priority_find_max(map_x);  
Y0=ds_priority_find_priority(map_x,X0);  
ds_priority_delete_value(map_x,X0)
X1=ds_priority_find_max(map_x);  
Y1=ds_priority_find_priority(map_x,X1);  
ds_priority_destroy(map_x);

Но теперь появляется баг, если есть два значения с одним приоритетом, одно почему-то не учитывается(удаляется?)..
 
WertyXBOCT Дата: Понедельник, 24.08.2009, 22:00 | Сообщение # 52
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Likantrop, скорее всего перезаписывается. Хотя вроде такого не может быть. Значит нужно другой напряжный метод искать...


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Ninja Дата: Понедельник, 24.08.2009, 22:11 | Сообщение # 53
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
а зачем вообще кучу юзать для 4-х элементов, помоему проще сделать обычными массивами, так например
Code
a[0,0]:=x1;
a[0,1]:=y1;
a[1,0]:=x2;
a[1,1]:=y2;
a[2,0]:=x3;
a[2,1]:=y3;
a[3,0]:=x4;
a[3,1]:=y4;
mx:=0;
for(i:=0;i<=4;i+=1)
{
   if (a[i,1]>mx) then
   {
     mx:=a[i,1];
     mxind:=i;
   }
}
my1:=mx;
mx1:=a[mxind,0];
for(i:=0;i<=4;i+=1)
{
   if (a[i,1]>mx)and(i<>mxind) then
   {
     mx:=a[i,1];
     mxind2:=i;
   }
}
my2:=mx;
mx2:=a[mxind2,0];

mx1,my1 - пара с макс y
mx2,my2 - пара с вторым макс y
т.е. сначала ищется макс элемент и запоминается его индекс, а потом опять ищем максимум, не учитывая первый максимум


Oh, my God! You kill Kenny! You bastard!
 
WertyXBOCT Дата: Понедельник, 24.08.2009, 22:19 | Сообщение # 54
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Ninja, А зачем юзать статическую память для двух массивов, которые врядли используются каждый шаг?..


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Ninja Дата: Понедельник, 24.08.2009, 22:46 | Сообщение # 55
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
WertyXBOCT, можно через var объявить массив, если настолько память важна.
куча делает много того, что в данной ситуации не нужно. для 4 элементов скорость не так важна, но если их будет хотябы 70, куча произведет n*log n =420 сравнений, а 2 пробега по массиву 2*n=140, т.е. в 3 раза меньше


Oh, my God! You kill Kenny! You bastard!
 
WertyXBOCT Дата: Понедельник, 24.08.2009, 23:07 | Сообщение # 56
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
Ninja, я кароче обиделся. Пойду во флешь. Меня или не слушают, или я слишком туп.


Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Вторник, 25.08.2009, 10:11 | Сообщение # 57
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
Ну значит мне остаются либо сетки(остальные дата структуры не катят), либо двухмерные массивы...
И то и другое пугает...о_О
ща будем смотреть...

Добавлено (25.08.2009, 10:11)
---------------------------------------------
WertyXBOCT, Ninja, большое спасибо...
при помощи массивов вроде бы получилось...
как объявить массив через var?

 
WertyXBOCT Дата: Вторник, 25.08.2009, 10:31 | Сообщение # 58
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
объяви переменную. А потом сделай из нее массив. после действия скрипта переменная(а значит и массив) уничтожится.

var XX;
XX[0]=0;
XX[1]=1;



Blog:www.WeslomPo.ru
mailto: i@weslompo.ru
 
Likantrop Дата: Вторник, 25.08.2009, 17:54 | Сообщение # 59
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
WertyXBOCT, благодарствую
Еще проблемка: из animeditor'а взял кусочек кода для сохрания и загрузки...У меня кривовато было...
Почему в вылезающем диалоге виндоуса видно все файлы, а не отфильтрованные по маске?
код загрузки:
Code

global.name= get_open_filename('*.anlvl','test_lvl.anlvl');
if global.name = '' return -1;
и так далее
 
Ninja Дата: Вторник, 25.08.2009, 18:21 | Сообщение # 60
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
get_open_filename('anlvl|*.anlvl','test_lvl.anlvl');


Oh, my God! You kill Kenny! You bastard!
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы товарища Likantrop'а (Вопросы серьезные,... дважды! xD)
Страница 3 из 10«12345910»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход