[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Загрузчик карт.
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
Хм, раньше как-то не замечал этой темы. Но узнал свой код редактора, непомню точно но счетчик был не для цикла. А для именования имен моделей в сцене. По не опытности вместо того чтоб работать с графом сцены я, мутил со списками и словарями. Дабы легче было выгружать измененные параметры, координаты и т.д.

ООП  -  
 
  • Страница 1 из 1
  • 1
Поиск: