Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Указать размер текстуры (http://www.flasher.ru/forum/showthread.php?t=131186)

3Desian 14.10.2009 17:24

Указать размер текстуры
 
Есть Plane() - квадрат. В качестве материала используется BitmapFileMaterial, в который подгружается jpg. Сам jpg не квадратный. Хочу натянуть текстуру на Plane(), сохранив при этом пропорции jpg-файла.
Код AS3:

public function changeMat(evt:FileLoadEvent): void
        {       
                var menu:DisplayObject3D = scene.getChildByName(photoElements) as DisplayObject3D;
 
                for each ( var item:DisplayObject3D in menu.children)
                                {
                                        var mat:BitmapFileMaterial = evt.currentTarget as BitmapFileMaterial;
 
                                        var bmd:Bitmap = evt.currentTarget as Bitmap ;
                                        trace("BITMAP!!!!!!!="+bmd);
 
                                        if (mat.name==item.name)
                                        {
                                                item.material=mat;
                                                align(bmd,item);
                                        }
 
                                }
                }
function align(bmp:Bitmap, plane:DisplayObject3D):void
                {
                          var ratio:Number = Math.min(SIZE / bmp.width, SIZE / bmp.height );
 
                            bmp.scaleX = bmp.scaleY = ratio;
                            bmp.x = plane.x + (SIZE - bmp.width) / 2;
                            bmp.y = plane.y + (SIZE - bmp.height) / 2;
                }

Трассировка выдаёт "BITMAP!!!!!!!=null", а функция align соответственно не работает. Как же быть? Подскажите пожалуйста. :)

mre 14.10.2009 17:59

А Вы уверены, что evt.currentTarget это Bitmap?
Кого подписываете?

3Desian 14.10.2009 18:00

Это Bitmap. JPG грузится с указанного в xml места.
Вот так вот нет ошибки, но и текстура не масштабируется.
Код AS3:

public function creationMenu ():void
                {       
var url:String = stroke.@picture;
 
var m:BitmapFileMaterial = new BitmapFileMaterial ();
m.doubleSided = true;
m.interactive=true;
m.smooth=true;
m.addEventListener(FileLoadEvent.LOAD_COMPLETE, changeMat);
m.name=item.name;
m.texture =url;
}
public function changeMat(evt:FileLoadEvent): void
{       
        var menu:DisplayObject3D = scene.getChildByName(photoElements) as DisplayObject3D;
        for each ( var item:DisplayObject3D in menu.children)
        {
 
        var mat:BitmapFileMaterial = evt.currentTarget as BitmapFileMaterial;
        var bmd:Bitmap = new Bitmap(mat.bitmap);
 
 
        bmd.scaleX=0.5;
        trace("BITMAP!!!="+bmd.scaleX);
        if (mat.name==item.name)
        {                                               
        item.material=mat;
        }
 
        align(bmd,item);
        }
}
 
function align(bmp:Bitmap, plane:DisplayObject3D)
{
          var ratio:Number = Math.min(SIZE / bmp.width, SIZE / bmp.height );
 
          bmp.scaleX = bmp.scaleY = ratio;
            bmp.x = plane.x + (SIZE - bmp.width) / 2;
            bmp.y = plane.y + (SIZE - bmp.height) / 2;
}


mre 14.10.2009 18:42

А Вы не видите противоречия в строках:
Код AS3:

...
var mat:BitmapFileMaterial = evt.currentTarget as BitmapFileMaterial;
var bmd:Bitmap = evt.currentTarget as Bitmap ;
...


3Desian 15.10.2009 09:11

Уже исправил. Обратите пожалуйста внимание на код в третьем сообщении. Там теперь:
Код AS3:

var mat:BitmapFileMaterial = evt.currentTarget as BitmapFileMaterial;
var bmd:Bitmap = new Bitmap(mat.bitmap);

Затем указываю размер у Bitmap
Код AS3:

bmd.scaleX=0.5;
        trace("BITMAP!!!="+bmd.scaleX);

В результате Flash ошибки не выдаёт, трэйсер выдаёт "BITMAP!!!=0.5" но изменения на плэйне не отображает. Что такое опять?
Мне всего то нужно в квадратные плэйны вписать прямоугольные JPG не меняя их пропорций. Сейчас они растягиваются по всему квадрату тем самым искажаются.
Может мне вообще не так нужно делать?


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.