среда, 14 декабря 2011 г.

Классы UrlRequest и UrlLoader в AS3

Начало 

Для загрузки obj-файла извне необходимо совсем мало кода:

var req:URLRequest = new URLRequest("http://имя_домена/test/models/p.obj");
req.method = URLRequestMethod.POST;
var load:URLLoader = new URLLoader();
load.addEventListener(Event.COMPLETE, completeHandler);
try {
       load.load(req);
}catch (err:Error) {
       trace(err.message);
}



и:

private function completeHandler(event:Event):void {
       trace(event.target.data);
}


В event.target.data возвращается содержимое файла.
Ну и, собственно, парсинг:

Сначала необходимо убрать из текста лишние знаки '\r' (так как разбиение строк идет по '\n').


var data=event.target.data.replace(/\r/g, "");


Затем разбить на строки, а каждую строку на слова, разделенные пробелами и т.д.


var line, lspl;
var lines = data.split("\n");
var lineCount = lines.length;
var i;
for(i = 0; i < lineCount; i++) {
  line = lines[i].replace(/\s+$/g, "");
  if(line.length > 0 && line[0] != '#') {
    lspl = line.split(/\s+/g);
    switch(lspl[0]) {
      case 'v':
        x = parseFloat(lspl[1]);
        y = parseFloat(lspl[2]);
        z = parseFloat(lspl[3]);
        _pts.push(new Point3D(x, y, z));
       break;
     case 'g':
     case 'o':
       o = new Object3D(lspl[1]);
       o.id = _childs.length;
       _childs.push(o);
       break;
     case 'f':
       var tface = new Face();
       var fvl = lspl.length;
       for(var j = 1; j < fvl; j++) {
         var sub = lspl[j].split('/');
         tface.add(_pts[parseInt(sub[0]) - 1]);
       }
       tface.init();
       o.add(tface);
       break;
     }
   }
 }


P.S. Нашел один из вариантов бесплатного хостинга - размещать js файлы на http://sites.google.com/
Так что скоро выложу пример с 3D.


Продолжение

Комментариев нет:

Отправить комментарий