Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   bitmapdata белый экран (http://www.flasher.ru/forum/showthread.php?t=172311)

bookin 06.12.2011 16:14

bitmapdata белый экран
 
добрый день столкнулся с проблемой и хотел бы узнать мнения специалистов возможно ли ее решить, есть элементы представляющие собой точки сохранения, простая линия в коде она вызывает функцию в которой записывается в битмапдату для последующего сравнения на столкновения с объектом, так вот эти элементы лежат на трассе которая имеет размеры в несколько раз большие размеры чем сцена, соответственны эти элементы находятся за приделами сцены что бы они попали в битмапдату при создании ее приходится указывать размер трассы то есть больше сцены размер примерно 3000х4000 px таких элементов у меня 6-ть по всей трассе и при компиляции, пользуюсь adobe flash во флешке появляется про100 белый экран, закрываю ее тыкаю во флеше на сцену и все элементы исчезают остается только одна белая сцена, закрываю открываю все нормально, все возвращается, более того открываю откомпилированную флешку из папки и она запускается как и должна, вопрос том как можно избавится от глюка, и второй вопрос возможно можно отрисовывать не указывая такие громадные размеры, если я уменьшаю количество элементов на сцене до двух к примеру то компилятор справляется нормально

вот функция которой пользуюсь
Код AS3:

function addBoxPoint(obj:MovieClip):void{
 
        if(debug&&boxesChekPoint.length<3){
                var bmpBoxPoint:BitmapData=new BitmapData(stage.width, stage.height, false);
                var myMatrix:Matrix = new Matrix();
                myMatrix.createBox(obj.scaleX, obj.scaleY, (obj.rotation*Math.PI/180), obj.x+mainMap.x,obj.y+mainMap.y);
                //new Rectangle(0, 0, ApplicationData.stageW, ApplicationData.stageH)
                bmpBoxPoint.fillRect(new Rectangle(0, 0, stage.width, stage.height), 0xFFFFFF);
                bmpBoxPoint.draw(obj,myMatrix);
                boxesChekPoint.push(bmpBoxPoint);
        }
        //trace(stage.width, stage.height,obj.scaleX, obj.scaleY, (obj.rotation*Math.PI/180), obj.x+mainMap.x,obj.y+mainMap.y)
 
        /*var b:Bitmap=new Bitmap(bmpBoxPoint);
        gameZ.addChild(b);*/

}

надеюсь описал понятно и надеюсь на вашу помощь, заранее спасибо

iNils 06.12.2011 16:42

Цитата:

надеюсь описал понятно
Как может быть понятно после такого?
Цитата:

соответственны эти элементы находятся за приделами сцены что бы они попали в битмапдату при создании ее приходится указывать размер трассы то есть больше сцены размер примерно 3000х4000 px таких элементов у меня 6-ть по всей трассе и при компиляции
Ни одной запятой! А весь текст - одно предложение.

bookin 06.12.2011 17:23

да с запятыми что то провтыкал писал на скорую руку просто

Цитата:

соответственно эти элементы находятся за приделами сцены, что бы они попали в битмапдату, при создании ее, приходится указывать размер трассы, то есть больше сцены, примерно 3000х4000 px, таких элементов у меня 6-ть по всей трассе и при компиляции

smithy 06.12.2011 18:21

Цитата:

простая линия в коде она вызывает функцию в которой записывается в битмапдату для последующего сравнения на столкновения с объектом
что такое простая линия в коде и как она может что-то вызывать?

bookin 06.12.2011 18:33

на сцене нарисована линия, преобразована в символ, внутри символа написал строку кода которая вызывает функцию передовая себя в качестве параметра, не знаю как еще правильнее объяснить

Добавлено через 1 минуту
Цитата:

Пришло время заняться платформами. Создаём прямоугольный клип и внутри него в кадре пишем одну простую строчку:
_parent.addBox(this);
В этом вся прелесть. В этой строке вызывается функция, которая добавит этот блок в массив платформ и в дальнейшем при проверке мы будем в цикле проходить по этому массиву.Слайд 7.
вот кусок текста из инструкции с сайта http://xitri.com возможно так понятнее

gloomyBrain 06.12.2011 18:51

на xitri в основном AS2 код. В AS3 писать код не в классах - плохая практика

bookin 06.12.2011 18:55

попробую по другому описать проблему:

есть сцена размерами 800х600;

создаю объект BitmapData заданной ширины и высоты:
Код AS3:

var bmpBoxPoint:BitmapData=new BitmapData(obj.width, obj.height, false);

т.к. нельзя задать данному объекту позиционирование он размещается в позиции 0, 0, объекта в котором находится.

Объект BitmapData находится в объекте у которого глобальные координаты 0, -980, соответственно объект BitmapData находится выше сцены, и принимает размер объекта который передан (к примеру 500х30)

далее с помощью матрицы задаю размер и позиционирование объекта который передан в BitmapData:
Код AS3:

var myMatrix:Matrix = new Matrix();
                myMatrix.createBox(obj.scaleX, obj.scaleY, (obj.rotation*Math.PI/180), obj.x+mainMap.x,obj.y+mainMap.y);

и отображаю исходный экранный объект:
Код AS3:

bmpBoxPoint.draw(obj,myMatrix);

получается BitmapData имеет координаты верхнего левого угла 0,0, а правого нижнего 500, 30
а объект который в нем отображен, и получил позиционирование с помощью матрицы, имеет координаты 162, 991, то есть намного ниже видимой(как я понимаю) части объекта BitmapData, и при добавления на сцену объекта

Код AS3:

var b:Bitmap=new Bitmap(bmpBoxPoint);
        gameZ.addChild(b);

я его просто не вижу, поэтому приходится при создании BitmapData указывать размеры объекта в котором он находится (3850х4245 px);, при нескольких таких процедур, создания битмапдат, происходит то что нужно исправить, вижу белый экран после компиляции и все

как я понимаю засирается память, но так как я новичок в as то могу ошибаться, и мне нужно понять как можно отрисовывать иначе что бы не задавать таких громадных размеров

Добавлено через 2 минуты
Цитата:

Сообщение от gloomyBrain (Сообщение 1050073)
на xitri в основном AS2 код. В AS3 писать код не в классах - плохая практика

да я знаю что плохо, но не ознакомился еще с работой в классах, при следующем проекте буду изучать работу, сейчас меня интересует другое, и я не думаю что мой вопрос решает переносом кода в классы

TanaTiX 06.12.2011 18:59

Вы путаете BitmapData и Bitmap. У BitmapData нет свойства x и y - они содержат графическую информацию, но на сцену такие объекты поместить нельзя.

bookin 06.12.2011 19:22

я не пытаюсь поместить на сцену с помощью
Код AS3:

 var b:Bitmap=new Bitmap(bmpBoxPoint);
        gameZ.addChild(b);

я пытаюсь посмотреть верно ли расположились элементы по данным bitnapData


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

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