forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   SetHeights() (http://forum.boolean.name/showthread.php?t=20333)

SOmar 26.06.2016 11:32

SetHeights()
 
PAX выручай башка ща лопнет!

public void SetHeights(int xBase, int yBase, float[,] heights);

Есть три файла:
asset_cor_x.txt содержит 500 int
asset_cor_y.txt содержит 25 000 int
asset_height.txt содержит 25 000 float

этот код поднимает террайн в определенных координатах взятых из файлов.
Код:

hcor = new float[10,500];
public void TerrainDataSetHeights()        {
                readX = File.ReadAllText (assetX).Split ('|');
                readY = File.ReadAllText (assetY).Split ('|');
                readH = File.ReadAllText (assetH).Split ('|');


                for (int x = 0; x < 10; x++)        {
                        Int32.TryParse(readX[x], NumberStyles.Any, new CultureInfo("en-US"), out heightX);
                        //countX++;
                        for (int y = 0; y < 50; y++) {
                                Int32.TryParse(readY[y], NumberStyles.Any, new CultureInfo("en-US"), out heightY);
                                float.TryParse(readH[countY], NumberStyles.Any, new CultureInfo("en-US"), out heightH);

                                hcor [heightX,heightY] = heightH;
                                td.SetHeights (heightX, heightY, hcor);
                                countY++;
                        }
                }

Пока второй аргумент hcor равен 500 всё норм но если поставить 510 получаем
ArgumentException: X or Y base out of bounds. Setting up to 514x10 while map size is 513x513

мне же надо внести 25 000 данных как?!

pax 01.07.2016 08:51

Ответ: SetHeights()
 
Во-первых ты каждую итерацию цикла устанавливаешь массив hcor = new float[10,500]; это уже ошибка, сначала ты должен его считать, а потом устанавливать. И устанавливаешь ты его в какие-то непонятно какие координаты, которые прочитаны из файлов. Я бы как минимум считал сначала все данные в массив размером 513х513 как тебе предлагает ошибка, а потом один раз установил.

PS: создавать в каждой итерации цикла культуру (new CultureInfo("en-US")) это же ад, создай ее перед циклами и запиши в какую-то переменную, потом передавай в методы парсинга.


Часовой пояс GMT +4, время: 15:12.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot