Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 01.08.2010, 10:47   #1
Miha
Нуждающийся
 
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений
(для 30 пользователей)
Перемещение по IList

есть код на BlitzMax:
Global TCSGWorld_List:TList = New TList

Type TCSGWorld

    Method New()
    
    Add(TCSGWorld_List)
    
    End Method


    Method Add(t:TList)
        _list=t
        _link=_list.AddLast(Self)
    End Method
    
    Method Remove()
        _list.remove Self
        
    End Method
    
    Method Delete()
            _list.remove Self
            _link = Null
    End Method

    Method After:TCSGWorld()
        Local t:TLink
        t=_link.NextLink()
        If t Return TCSGWorld(t.Value())
    End Method

    Method Before:TCSGWorld()
        Local t:TLink
        t=_link.PrevLink()
        If t Return TCSGWorld(t.Value())
    End Method

    Method AddBrush(b:TCSGBrush)
    b.Add(Brush_list)
    
    End Method
    
    Method RebuildWorld(dynamic=False)
    Local b:TCSGBrush
    For b = EachIn Brush_list
    b.CSG(Self,False,dynamic)
    Next
    
    End Method
    

Field Brush_list:TList = New TList
Field id=CountList(TCSGWorld_List)
Field _list:TList
Field _link:TLink

End Type
Как мне реализовать это на C#?
Проблема в том что я не знаю как реализовать перемещение по _list (см. Method After:TCSGWorld(), Method Before:TCSGWorld()).
В BlitzMax для этого используется TLink, а C# х.з.
Поможите!
З.Ы. Если можно код плз.
(Offline)
 
Ответить с цитированием
Старый 01.08.2010, 11:37   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перемещение по IList

В C# есть класс связанных списков:
LinkedList
на той же странице есть пример использования.
А посмотрев все его функции думаю ты найдешь все что нужно
LinkedList - члены
Методы расширения смотреть если только используете Net Framework версии > 2.0
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 10:21   #3
Miha
Нуждающийся
 
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений
(для 30 пользователей)
Ответ: Перемещение по IList

Вообщем в двух словах!
Переписываю код с BlitzMax. Там видать какие-то коллизии с коллекциями.
Вот код:
public void CSG(TCSGWorld w, bool recursive = true, bool dynamic = false)
            {
                int mode = CSGFlag;

                int result, count;
                bool _protected;


                
                ResetBounds(w);
                CopyOriginal();

                foreach (TCSGBrush brush in Collist)
                {
                    if (brush != this)
                    {
                        foreach (TCSGSurface s in brush.Surface_List)
                        {
                            foreach (TCSGTriangle t in s.Original_List)
                            {
                                foreach (TCSGSurface s2 in this.Surface_List)
                                {
                                    foreach (TCSGTriangle t2 in s2.Triangle_List)
                                    {                                       
                                        if (t2.tarid != t.id)
                                        {
                                            if (t2.del == 0)
                                            {
                                                result = t2.ClassifyPolygon(t);
                                                switch (result)
                                                {
                                                    case CSG_SpliTCSGTriangle:
                                                        if (t2.Triangles_Collide(t) == true)
                                                        {
                                                            t2.Split_Triangle(t, s2.Triangle_List);
                                                        }
                                                        break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    Overwrite = false;

                    foreach (TCSGSurface s in Surface_List)
                    {
                        foreach (TCSGTriangle t in s.Triangle_List)
                        {
                            foreach (TCSGBrush brush1 in Collist)
                            {
                                if (brush1 == this)
                                {
                                    Overwrite = true;
                                    continue;
                                }

                                t.del = 1;
                                t.ClipBrush(brush1, CSGFlag, Overwrite);

                            }
                            Overwrite = false;
                            if (t.del == 1 && t._protected == false)
                            {
                                t.Remove();
                            }

                        }
                    }

                    if (recursive == true)
                    {
                        foreach (TCSGBrush brush2 in Collist)
                        {
                            if (brush2 != this)
                            {
                                brush2.CSG(w, false, dynamic);
                            }
                        }
                    }
                }
            }
Как только функция задействуется, вылетает исключение!
Collection was modified after the enumerator was instantiated
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 11:17   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перемещение по IList

Могу угадать где вываливается такая ошибка:
if (t.del == && t._protected == false)
{
      
t.Remove();

В цикле foreach нельзя изменять коллекцию (удалять/добавлять/заменять элементы).
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 11:59   #5
Miha
Нуждающийся
 
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений
(для 30 пользователей)
Ответ: Перемещение по IList

А как мне удалить элемент коллекции?
Я так понимаю в коллекции располагаются объекты. Мне надо удалить объект в коллекции и и сам элемент коллекции (как бы индекс).
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 14:28   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перемещение по IList

Для этого можно использовать цикл for или воспользоваться методом ForEach (ссылка) если ты пользуешься списком List<T>
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 16:00   #7
Miha
Нуждающийся
 
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений
(для 30 пользователей)
Ответ: Перемещение по IList

ок спс!
И еще вопрос не в тему:
Где мне найти наиболее полную и конкретную информацию по XNA?
О его возможностях.
Есть редактор свой, писал давно и хочу его модернезировать. И вот думаю перейти на XNA. Как считаешь?...
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 18:25   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перемещение по IList

Сообщение от Miha Посмотреть сообщение
Как считаешь?...
Я? А я тут причем? Ты сам выбирай инструмент, который тебе подходит.
Справка по XNA здесь
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com