RS Game Maker Community
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

 
Расширенный поиск
  Главная  Форум   Вики Блоги FAQ Игры Статьи Примеры Войти Регистрация  
Вики
Все желающие приглашаются редактировать вики. Можете писать о своих (или чужих) играх, размещать туториалы, постить статьи - главное навесить категорию.
Страниц: 1 2   Вниз
  Печать  
Подскажите что не так?
0 Пользователей и 1 Гость смотрят эту тему.
Wargromz
Активный участник
**

Репутация: 6
Offline Offline

Сообщений: 155


17 Июнь 2009 в 01:07
Подскажите что не так?  :-\
Хотел сделать чтоб данные объекты (object312) не подходили друг к другу ближе чем на 100 клеток.
Они все равно подходят

Event Step (object312)
iii = instance_nearest(x, y, object312)
x1=iii.x-x
x2=x-iii.x

y1=iii.y-y
y2=y-iii.y

if x1<100 and x1>0 then {x-=5}

if x2<100 and x2>0 then {x+=5}

if y1<100 and y1>0 then {y-=5}

if y2<100 and y2>0 then {y+=5}

С Уважением, Wargromz...
 
Raidho
Завсегдатай
****

Репутация: 58
Offline Offline

Сообщений: 856


Ответ № 1 17 Июнь 2009 в 01:52
Когда объект следует пути, такого рода код игнорируется.
Wargromz
Активный участник
**

Репутация: 6
Offline Offline

Сообщений: 155


Ответ № 2 17 Июнь 2009 в 01:55
Жалко, ну ладно.
А direction = point_direction(x1, y1, x2, y2) тоже является путем?

С Уважением, Wargromz...
Калмык
Завсегдатай
****

Репутация: 258
Offline Offline

Награды:
За перевод справки Game Maker 8Легенда сайта
Сообщений: 936

Ответ № 3 17 Июнь 2009 в 01:57
Когда объект следует по пути, direction указывает направление к след. точке, если не ошибаюсь.

Если тебе помогли- ты их отблагодари, в карме плюсани!
Группа GMakers.xyz ВКонтакте. Вступай и зови друзей!
Wargromz
Активный участник
**

Репутация: 6
Offline Offline

Сообщений: 155


Ответ № 4 17 Июнь 2009 в 02:00
direction указывает направление , куда объект идет. тоесть x1y1 - откуда начинается путь, а x2y2 -в какой точке путь оканчивается.
Получается, это своего рода тоже путь..

С Уважением, Wargromz...
Silen
Старожил
******

Репутация: 277
Offline Offline

Награды:
Легенда сайта
Сообщений: 2 483


Indie Game Developer

Ответ № 5 17 Июнь 2009 в 02:06
Это направление движения, а не путь. Если не изменяет память, когда объект двигается по пути (то есть с помощью встроенных функций path), то direction объекта не играет роли, так как используется direction пути.

Don't tell why, tell why not.
Wargromz
Активный участник
**

Репутация: 6
Offline Offline

Сообщений: 155


Ответ № 6 17 Июнь 2009 в 02:11
Ок, а почему тогда скрипт не пашет? :)
Который я в самом начале написал

С Уважением, Wargromz...
andNsX
Ветеран форума
*****

Репутация: 111
Offline Offline

Награды:
Легенда сайта
Сообщений: 1 345

Ответ № 7 17 Июнь 2009 в 06:47
Потому что 
    x1=iii.x-x
    x2=x-iii.x
   
    y1=iii.y-y
    y2=y-iii.y
Уходит в минус, это элементарно
    x1=abs(iii.x-x);
    x2=abs(x-iii.x);
   
    y1=abs(iii.y-y);
    y2=abs(y-iii.y);
Raidho
Завсегдатай
****

Репутация: 58
Offline Offline

Сообщений: 856


Ответ № 8 17 Июнь 2009 в 10:17
Нет, не по этому. А потому что координаты объекта, следующего пути, строго равны координатам точки в текущей точке пути.
Уже только потому, что объект следует пути, его direction и speed, равно как и координаты, нельзя поменять вручную.
Точнее можно, но эффект будет чуть меншьше, чем нулевой.
Mikozoid
Младший администратор
Завсегдатай
******

Репутация: 196
Offline Offline

Награды:
Легенда сайта
Сообщений: 996


(<

Ответ № 9 17 Июнь 2009 в 11:02
Просто когда object312 ищет object312, то находит себя.
Вот так будет работать:
with (object312) {
    if (other.id != id) {
        x1=other.x-x;
        y1=other.y-y;
    
        if abs(x1)<100 and abs(y1)<100 then {
           if x1 < 0 then other.x -= 5 else other.x += 5;
           if y1 < 0 then other.y -= 5 else other.y += 5;
           break;
        }
    }
}
Там еще проблема была, что оси отдельно проверялись, тоже поправил
ЗЫ. Что за хрень вы несете?

Raidho
Завсегдатай
****

Репутация: 58
Offline Offline

Сообщений: 856


Ответ № 10 17 Июнь 2009 в 13:42
Мне вначале показалось что объект движется по пути. Незнаю почему.
Сделаю кстати замечание (возможно, неоправданное) о том, что переменная other хранит айдишник объекта, с которым произошло столкновение в событии собственно столкновения.
Combo
Активный участник
**

Репутация: 14
Offline Offline

Сообщений: 186


НЕ женат

Ответ № 11 17 Июнь 2009 в 14:17
//поправочка
do {
iii = instance_nearest(x, y, object312)
if instance_exists(iii) dist=point_distance(x,y,iii.x,iii.y)
else dist=101
if dist<=100 {
x-=lengthdir_x(100-dist,point_direction(x,y,iii.x,iii.y))
y-=lengthdir_y(100-dist,point_direction(x,y,iii.x,iii.y))
}
}
until dist>100
}
вроде так лучше всего
Последнее редактирование: 17 Июнь 2009 в 15:52 от Combo

RIP: execute_string, execute_program, variable_local_get...

У программера есть два состояния: "Втупляю" и "Попёрло".
Raidho
Завсегдатай
****

Репутация: 58
Offline Offline

Сообщений: 856


Ответ № 12 17 Июнь 2009 в 14:39
Лучший вариант именно Микозоидовский.
Combo
Активный участник
**

Репутация: 14
Offline Offline

Сообщений: 186


НЕ женат

Ответ № 13 17 Июнь 2009 в 15:48
Если инстансов object312 больше одной(что очевидно из сути проблемы), то with (object312) {...} будет совершать действие над первым инстансом этого объекта в руме. Не надо всеми, а над первым. Но уж если так делать, то надо ставить луп на инстанс намбер и делать with (instance_find(i,object312))

Или я чего то не понял?...

RIP: execute_string, execute_program, variable_local_get...

У программера есть два состояния: "Втупляю" и "Попёрло".
Mikozoid
Младший администратор
Завсегдатай
******

Репутация: 196
Offline Offline

Награды:
Легенда сайта
Сообщений: 996


(<

Ответ № 14 17 Июнь 2009 в 15:52
Именно надо всеми. Можешь проверить.

Combo
Активный участник
**

Репутация: 14
Offline Offline

Сообщений: 186


НЕ женат

Ответ № 15 17 Июнь 2009 в 15:55
with (<expression>) <statement> <expression> indicates one or more instances. For this you can use an instance id, the name of an object (to indicate all instances of this object)
:o :o :o :o :o :o :o :o :o

RIP: execute_string, execute_program, variable_local_get...

У программера есть два состояния: "Втупляю" и "Попёрло".
Wargromz
Активный участник
**

Репутация: 6
Offline Offline

Сообщений: 155


Ответ № 16 18 Июнь 2009 в 00:07
микозоид пасиб - лучший вариант, другие пока не пробовал , но твой идеально работает))
Последнее редактирование: 18 Июнь 2009 в 00:15 от Wargromz

С Уважением, Wargromz...
Wargromz
Активный участник
**

Репутация: 6
Offline Offline

Сообщений: 155


Ответ № 17 18 Июнь 2009 в 00:59
а если я объекту 312 в step напишу такое (см.ниже) , то он аналогично будет отталкиваться тока от объекта313?
with (object313) {
        if (other.id != id) {
            x1=other.x-x;
            y1=other.y-y;
       
            if abs(x1)<100 and abs(y1)<100 then {
               if x1 < 0 then other.x -= 5 else other.x += 5;
               if y1 < 0 then other.y -= 5 else other.y += 5;
               break;
            }
        }
    }


С Уважением, Wargromz...
Raidho
Завсегдатай
****

Репутация: 58
Offline Offline

Сообщений: 856


Ответ № 18 18 Июнь 2009 в 05:03
Абсолютно верно. Если нужно задать множество различных объектов, то надо их объединить одним Parent'ом, и уже с ним (with) выполнять код.
Combo
Активный участник
**

Репутация: 14
Offline Offline

Сообщений: 186


НЕ женат

Ответ № 19 19 Июнь 2009 в 03:27
если код совать в объект 312 то строчка
if (other.id != id) {
будет не нужна. Разве что 313ый является парентом 312го - в этом случае нужна.

RIP: execute_string, execute_program, variable_local_get...

У программера есть два состояния: "Втупляю" и "Попёрло".
Страниц: 1 2   Вверх
  Печать  
 
Перейти в:  

RSGMC (gmakers.ru) © 2007—2018
Счётчик–@Mail.ru