Загрузчик карт.
|
|
Rawieo | Дата: Пятница, 30.11.2012, 19:55 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
| Вобщем мучился я с ним оочень долго. Идея такова: есть некоторый файл состоящий из строк. Строки из файла читаются в кортеж. Затем по очереди каждый элемент кортежа считается, и модель, о которой написано в элементе кортежа (тоесть бывшей строке файла) грузится на сцену. У меня ничего не получается.
|
|
| |
ninth | Дата: Суббота, 01.12.2012, 13:59 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Ну ты бы хотя бы привёл пример структуры своего файла и код, который не работает.
|
|
| |
Rawieo | Дата: Воскресенье, 02.12.2012, 22:22 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
| таков он: Code def load_map(map_name): Map=open("maps/"+str(self.name_level)+".map","rb") # читаем файл list_Ob=Map.readlines() # создаем из строк файла список Map.close() # закрываем файл sum=len(list_Ob) # подсчитываем количество строк(моделей) for index_mod in range(sum): # или len(list_Ob) model=self.list_Ob[self.index_mod] # получаем строку по индексу data=model.split() # создаем список из строки, например: 'teapot' 'Data/Objects/teapot' '0,0,0' name_mod=data[0] # берем имя path_mod=data[1] # путь модели сoord=data[2] # берем координаты из списка pos=coord.split(",") # теперь создаём список координат, например: '0' '0' '0' object=loader.loadModel(path_mod) # создаём переменную для загрузчика со значением пути взятым из списка по индексу 1 ModelNode=render.attachNewNode(str(name_mod)) # создаём нод для модели в рендере со значением имени из списка по индексу 0 ModelNode.setPos(float(pos[0]), float(pos[1]), float(pos[2])) # устанавливаем координаты ModelNode.setTag('DirModel' , path_mod) # устанавливаем тег, со значением пути от куда была загруженна модель object.reparentTo(ModelNode) # цепляем модель к ноду self.Node_list.append(str(name_mod))# вносим имя нода в список self.index_mod += 1 # с каждой загруженной моделью прибавляем индекс
|
|
| |
ninth | Дата: Понедельник, 03.12.2012, 11:14 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Пока вижу, что ты не разобрался с тем, что такое self. Если коротко, то это ссылка на класс в котором у тебя исполняется код. Если класса нет, то и self не используется. К слову index_mod и self.index_mod - это разные переменные. Помимо этого, тебе не требуется в цикле увеличивать счётчик, т.к. это делается автоматически в for index_mod in range(sum).
Code # -*- coding: utf_8 -*-
def load_map(map_name): f=open(map_name, 'r') # читаем файл lines = f.readlines() f.close for line in lines: data = line.split() name_mod = data[0] # берем имя path_mod = data[1] # путь модели x,y,z = map(float, data[2].split(',')) # координаты # дальше работаем с полученными данными # я просто вывожу их в терминал print 'NAME: %s \nPATH: %s\nPOS:(%.2f, %.2f, %.2f)\n------' % (name_mod, path_mod, x, y, z)
load_map('test.map')
з.ы. лучше всё же отделять поля не пробелами, а, например, точкой с запятой, иначе рискуешь напороться на ошибку, если случайно поставишь где-то лишний пробел.
|
|
| |
Rawieo | Дата: Понедельник, 03.12.2012, 11:55 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
| мм... спасибо
|
|
| |
serg-kkz | Дата: Воскресенье, 13.10.2013, 00:06 | Сообщение # 6 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Хм, раньше как-то не замечал этой темы. Но узнал свой код редактора, непомню точно но счетчик был не для цикла. А для именования имен моделей в сцене. По не опытности вместо того чтоб работать с графом сцены я, мутил со списками и словарями. Дабы легче было выгружать измененные параметры, координаты и т.д.
ООП -
|
|
| |