Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   TrainZ - Звуки (http://www.trainsim.ru/forum/forumdisplay.php?f=29)
-   -   Вопросы по Auran GameScript (http://www.trainsim.ru/forum/showthread.php?t=13454)

GSTrainz 15.02.2011 20:24

Нашел ,почему на тестовой и основной карте по разному получается.
На тестовой первый вагон train2 обращен к train1.На основной-последний.
Создал на тестовой карте train2 хвостом к train1 - вообще все 3 проверки расстояния выполнились сразу (a==true в этом случае получается всегда)
Пробовал от последнего вагона train2 измерять расстояние
( one2=train2.GetVehicles()[4];// 5 вагон состава из 5 вагонов) и все равно a==true получается всегда.
train2.Turnaround(); тоже ничего не дало...
А вот когда ставишь на рельсы между составами какой-нибудь Track объект,расстояние измеряется до него(как и на основной карте).

TRam_ 15.02.2011 20:29

[QUOTE]train2.Turnaround(); тоже ничего не дало...[/QUOTE]если сидишь в кабине и лок однокабинный, то оно ничего не даст. Только если снаружи сидеть либо лок типа ЧМЭ3 нового.

GSTrainz 15.02.2011 20:38

Да в составe train2 вообще нет локомотива.Просто хотел его логически развернуть,что бы последний вагон стал первым.

GSTrainz 16.02.2011 02:16

Короче,может кому пригодится:методом "научного тыка" проблему решил.
train2.Turnaround();
one2=train2.GetVehicles()[1];
и дальше,ко всем измеряемым расстояниям,надо прибавлять длину 1 пассажирского (в данном случае) вагона ( + 23 )
Нулевой вагон почему-то не работает.

Combine 17.02.2011 12:16

[QUOTE]и дальше,ко всем измеряемым расстояниям,надо прибавлять длину 1 пассажирского (в данном случае) вагона ( + 23 )[/QUOTE] Не длину вагона, а половины длин вагонов составов. Расстояние измеряется между геометрическими центрами (0,0,0 моделей вагонов).

GSTrainz 19.02.2011 21:42

Combine,да нет.В этом случае-расстояние как раз-таки до сцепки Vehicles()[1](Vehicles()[0] почему-то в упор не видит).Поэтому надо плюсовать длину невидимого для команды вагона.Получается,что Turnaround() логически разворачивает состав,но не вагон в нем.И нулевой вагон является тем последним триггером перед составом.
У меня сейчас такая проблема возникла:наконец дошло до меня,что в kuid-table сценария не обязательно ставить вагоны.Можно указывать куид состава(который создается в редакторе сессии) и из kuid-table этого состава брать вагоны в сценарий.
Но...Создал я составы из одинаковых по типу вагонов(платформы-один состав,полувагоны-другой и т.д.) и настроил сценарий так,что бы эти вагоны из составов создавались в сценарии.Все отлично.Все работает.Но...Для чего я это все делал?Для того,что бы каждый желающий мог поставить в составы свои вагоны.Для этого я создал составы из 30 одинаковых по типу вагонов(думал,что и в kuid-table этих составов будет по 30 вагонов)Но такой обломс.В kuid-table состава-всего один куид(куид-то у всех 30 вагонов одинаковый...)И менять вагоны в составе невозможно(чтоб при выходе эти изменения сохранялись).И что делать...

Добрый 10.08.2011 10:34

Глупый вопрос
 
Неожиданно столкнулся с такой проблемой - заполнение массива. В Java это выглядит так: int [] st; st= new int []{1,2,3,4,5};
Однако в трайнзе int [] st; компилятор пропускает, а вот st= new int []{1,2,3,4,5}; - нет. Если заполнять ячейки по одной st [0] = 1; то работает, а сразу все - ругается. Не могу понять, какие знаки препинания тут требуются.:confused:

TRam_ 10.08.2011 10:44

[QUOTE]Не могу понять, какие знаки препинания тут требуются.[/QUOTE]просто трейнз не поддерживает всего того синтаксиса, который реализуется в Си. Потому заполнять надо только по 1 элементу.Вообще надо так:

int[] st= new int [5];

st[0]=1;
st[1]=2;
st[2]=3;
st[3]=4;
st[4]=5;

genesis 10.08.2011 15:15

[code]public int[] NewIntArray(string numbers)
{
string[] tokens = Str.Tokens(numbers, ",");
int[] ret = new int[tokens.size()];
int i;
for (i = 0; i < tokens.size(); ++i)
ret[i] = Str.ToInt(tokens[i]);
return ret;
}[/code]
[code]int[] st = NewIntArray("1,2,3,4,5");[/code]
Си, джава, шарп, GS похожи, но не перестают от этого быть разными языками.

Добрый 11.08.2011 12:50

Вот спасибо! А то я не мог понять, как упростить ввод данных:drinks:
И ещё один глупый вопрос - можно ли в трайнзе создавать массивы программно, т. е. название массива не прописывается в ручную, а задаётся переменной? Интуитивно понимаю, что нет, но знаний маловато:o

TRam_ 11.08.2011 13:34

Делать массив объектов, содержащих массивы. Обычные двумерные массивы трейнз не поддерживает.

Добрый 11.08.2011 14:05

Нет, такое решение мне не подходит. Вот я знаю, что можно выяснить длину массива, скажем, так: int аа = а.size(). А как можно выяснить название массива? Есть формула?

TRam_ 11.08.2011 15:31

Нет, название ты вычислить не можешь.

В крайнем случае объяви объект

class NamedArray
{
public string name;
public int[] arr;
};

организуй массив таких объектов

NamedArray[] main_arrays=new NamedArray[5];
for(i=0;i<5;i++)
{
main_arrays[i]=new NamedArray();
main_arrays[i].arr=new int[10];
}

и затем именуешь

main_arrays[0].name="hren1";
main_arrays[2].name="korova";


и затем в коде, когда тебе понадобится массив с нужным именем, делай перебор

int i=0;
int j=-1;
while(i<main_arrays.size() and j<0)
{
if(main_arrays[i].name=="dispetcher")
j=i;

i++
}

if(j>=0)
{
next_array=main_arrays[j].arr;
}

Добрый 12.08.2011 16:45

Вот Combine посоветовал не использовать goto в скрипте, ибо вызывает ошибки. Посоветуйте, как более корректно осуществлять переход от одной строки к другой, если речь не идёт о выходе из цикла. С выходом из цикла вопросов нет.

genesis 12.08.2011 19:51

Безусловный переход от одной строки другой уже некорректен и свидетельствует о неверном подходе к решению задачи. Гоуту лишь следствие.
Расскажи, в чем проблема.


Текущее время: 17:06. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim