if mp_grid_path(global.Moving_mpgrid,path_combat,x+0,y+0,global.currenttile.x,global.currenttile.y,false)= true { path_start(path_combat,10,0,false)
Путь составляется сам и объект движется то вверх - то вниз. Но он должен еще и поворачивать свой спрайт и предлагается вот такой скрипт: direction=image_angle - естественно у меня он нифига не работает....
Ну тогда я вот ,что намутил... move_contact_solid(direction,60) if collision_rectangle(id.x-24,id.y-24,id.x+24,id.y+24,object1,0,1){ //Выделяем пулю прямоугольником ,48 на 48 ,и если этот прямоугольник задевает объект 1 , то пуля удаляется. instance_destroy() }
Sanchez06, как же я задолбался=) move_contact_solid(direction,30); - дело в этом коде! Может попробовать использовать другой код? Например: speed=20 //Всегда действующая скорость direction=0 //Дирекция , можно сделать так direction=point_direction(x,y,mouse_x,mouse_y) -стреляет туда где курсор или direction=player.direction - стреляет туда , куда направлен спрайт игрока (Вроде так , но не уверен)
Ошибки нету , просто скрипт не срабатывает. Возможно не создается список или он не заносится или не удается сравнить число с переменной. Но в скрипте у меня все в порядке , проблемы могут заключаться только в тех строках. ds_list_add(global.turn,UnitSpeed[O] - работает точно , потому что вместе с ним срабатывает и переменная(Ну я могу ее увидеть через Draw) if UnitSpeed[O]=ds_list_find_value(global.turn,1){global.Unit[O]=1 } - не срабатывает , переменная global.Unit[O]=1 не работает. (Через клавиши изменял эту переменную и она оказалась правильной, значит с ней все должно быть в порядке) global.turn=ds_list_create()-создается в другом объекте в Create , возможно и является проблемой ds_list_find_value(global.turn,1)- Draw говорит , что это число всегда равно нулю , значит возможно в список число не заносится
Проблему решил сам , оказалось, что в самом верху списка стоит число 0 ,а не 1 - вот и весь прокол... Вот тут - ds_list_find_value(global.turn,1) ,а должно быть ds_list_find_value(global.turn,0)
Добавлено (30.06.2013, 08:27) --------------------------------------------- Еще одна проблема... Почему в родитель не добавляет в списки второе число!? Step: (родитель)
Код
if global.Phase1=1 { if UnitSpeed[O]>=100 { ds_list_add(global.turn,UnitSpeed[O]) ds_list_add(global.turn2,O) global.Phase1=0 } if UnitSpeed[O]<100 { UnitSpeed[O]+=D } }
В списке я вижу только первое ,а он должен был внести 2 одинаковых числа от двух юнитов так, как у них одинаковое число D и UnitSpeed[O] (Проблема заключается в том, что юнит 1 очень далеко убегает по скорости от второго , когда скорость у них одинаковая!)
Ошибки нету , просто скрипт не срабатывает. Возможно не создается список или он не заносится или не удается сравнить число с переменной. Но в скрипте у меня все в порядке , проблемы могут заключаться только в тех строках. ds_list_add(global.turn,UnitSpeed[O] - работает точно , потому что вместе с ним срабатывает и переменная(Ну я могу ее увидеть через Draw) if UnitSpeed[O]=ds_list_find_value(global.turn,1){global.Unit[O]=1 } - не срабатывает , переменная global.Unit[O]=1 не работает. (Через клавиши изменял эту переменную и она оказалась правильной, значит с ней все должно быть в порядке) global.turn=ds_list_create()-создается в другом объекте в Create , возможно и является проблемой ds_list_find_value(global.turn,1)- Draw говорит , что это число всегда равно нулю , значит возможно в список число не заносится.
Уайльд, Может попробовать использовать 3D модели , превращая их в 2D.(Мне бы это показалось проще , чем рисовать) Все думают 3D max трудный , но на самом деле он очень простой.Сначала надо создать что-нибудь , а потом на камеру двигать модель и скриншотить ,а потом просто обрезать модель от черного фона(Ну надо скриншотить на черном фоне). Где-то я кажется видел функцию в 2D , то есть сриншотить не надо , он сам все делает , но возможно мне показалось- я ее не использовал ,и давно это было.(в блендере)
global.turn=ds_list_create() //Создан в другом объекте в пункте создания.(Проблема возможна даже тут...) ........ ds_list_sort(global.turn,false) //Используется в степе при некотором условии. ........ ds_list_add(global.turn,UnitSpeed[O] //Должен работать правильно , он должен внести число(Скорость) в список (но возможно не работает) ....... if UnitSpeed[O]=ds_list_find_value(global.turn,1) { //Если первое число в списке равно числу(Скорости) у этого объекта , то ему можно ходить.Проблема тут , но ее вроде бы и не должно быть (Проверял другими условиями) global.Unit[O]=1 }
Почему не получается? Вывести ds_list_find_value(global.turn,1) в Draw не получилось- число было равно нулю , а вот UnitSpeed[O] удалось ,и все было в порядке с ним.
jone157, ох , мне бы самому этот код=) Вот что-то подобное , я изменил немного свой код и теперь использую родителя: 1) o_p(объект- родитель),O1,O2,O3 (Другие 3 объекта) , C_1(Объект списка) 2)o_p Step:
Код
if global.SpeedtGo=1 //Если эта переменная равна 1 то можно считать: { if UnitSpeed[O]>100 //Если скорость одного из трёх объектов набила больше 100 { ds_list_add(global.turn,global.UnitSpeed[O]) //Число у объекта ,которому оно принадлежит, попадает в список global.CombatGo=0 //Счет скорости-прекратить (Пусть пока тут поваляется) }else { global.UnitSpeed[O]+=D //Если скорость меньше 100 , то прибавить к ней скорости (т.е. было 10 +10 стало 20 , было 20 + 10 , стало 30 и так, пока не будет 100) } }
3)C_1: Create:
Код
global.CombatGo=1 //начать счет скорости global.turn=ds_list_create() //Создать лист
Step:
Код
if global.CombatGo=0 { //Если счет скорости прекратился ds_list_sort(global.turn,false) //Отсортировать лист по убыванию
} 4)Список отсортировался 5)А дальше у меня не получается
O1:
Код
Create: O=1 UnitSpeed[O]=10 D=UnitSpeed[O]
O2:
Код
Create: O=2 UnitSpeed[O]=8 D=UnitSpeed[O]
O3: Create:
Код
O=3 UnitSpeed[O]=10 D=UnitSpeed[O]
Добавлено (24.06.2013, 18:41) --------------------------------------------- У меня возникла идея!=) Но блин голова вообще не работает после работы... Я думаю после 4 пункта надо сделать следующее ds_list_find_value(global.turn,1) //Вывсети из списка первое число У родителя: Step:
Если например у нас два объекта набрали одинаковую скорость , тогда сначала ходит тот объект , чей O=1 , а потом тот чей O=2. (Может кто-нить подсказать как это сделать?) В итоге:
Если global.UnitSpeed[O]=первому числу из списка and global.UnitCanMove[O]=1 //global.UnitCanMove[O]=1 - переменная позволяющая игроку ходить Сначала идет global.UnitCanMove[1]=1 далее global.UnitCanMove[2]=1 (Но его число не достигло больше сотни - значит он ходить не будет) global.UnitCanMove[3]=1 (Ходит после того , как первый объект закончит ход) O кончились 7)ds_list_delete(global.turn,1) //Первое число из списка удаляется! ds_list_sort(global.turn,false) Ну и все=) далее уже нормально должно идти...
Да помогут тебе переменные!=) 1)Создаем левый объект!Пофиг какой!И ставим его постоянным.(Это постоянный объект , можно переносить хп игрока на другую комнату , очки , и прочее , а мы будем переносить переменные!В данном случае мы перенесем переменные одной двери) 2)В меню переменной ставим родителя-дверь. 3)В скрипте двери: room_goto(room2) global.Room[2]=1 //Вторая комната началась global.Room[1]=0 //Первая комната кончилась 4)Скрипт у бека: if global.Room[1]=1{room_goto (room1)} //Если комната 1 , то мы идем в комнату 1 if global.Room[2]=1{room_goto (room2)} //Если комната 2 , то мы идем в комнату 2 5)Скрипт Play: global.Room[1]=1 //Началась первая комната
Ну это простота В настройках поставь , чтобы все неопознанные переменные стали равны нулю , или сам их расставляй. Мне лично лучше , чтобы они автоматически изначально стали равны нулю.
О родителе: Родитель взял на себя все переменные двери , у него произошел такой же код: global.Room[2]=1 //Вторая комната началась global.Room[1]=0 //Первая комната кончилась Но , только он стал постоянным , на все комнаты , а у двери остался только действующий на свою комнату.
Добавлено (23.06.2013, 23:46) --------------------------------------------- О загрузках: Поставь в скрипте кнопки у игрока game_load(Имя сохранения) Это же так просто. А лучше ставить 2 сохранения: На начало комнаты , второе на быстрое(Где угодно)
Опишу проблему поподробнее: 1)Дано 2 объекта(Число их может быть любым) и 2 числа (числа получились по формуле , и постоянно меняются), например: если число стало больше 10 то оно отправляется в список. 2)Получились числа 12 и 14 ,далее они попадают в список 3)Числа сортируются 4)И вот первым стоит 14 ,а вторым 12 5)Число 14 принадлежит объекту 2 и поэтому изменяет его переменную на 1 и число удаляется из списка 6)Объект ,после некоторых манипуляций с ним, изменил свою переменную на 0 и изменил другую переменную на 1 ,чтобы та продолжила действия со списком (Ну например global.Next=1) 7)Далее список снова выбирает первое число в нем и так , как число 14 удалилось - осталось 12 и оно становится первым 8)Число 12 изменяет переменную своего объекта , которому оно принадлежало на 1 и удаляется из списка 9)Объект ,после некоторых манипуляций с ним, изменил свою переменную на 0 и изменил другую переменную на 1 ,чтобы та продолжила действия со списком 10)Список вновь заносит в себя новые числа уже от 4 других объектов и происходят аналогичные действия.
(Подобный список я уже видел в одном исходнике , но там числа не изменялись , но их можно было изменить в настройках.Исходник был очень трудный и понять его было очень трудно , а также там был общий родитель для всех объектов)