Страница 1 из 1
Создание своей кнопки
Добавлено: 22 июн 2012, 20:47
Casperovskii
Доброго времени суток всем!
Столкнулся с проблемой: не могу сделать кнопку, состоящую из собственных иконок. Все изображения размером 50*50 и находятся в одной папке с исполняемым файлом. Вот код:
Код: Выделить всё
package { import flash.display.*; import flash.net.*; public class UpPanel extends Sprite { private var button:SimpleButton; private var pictLoader:Loader = new Loader(); private var buttonUpState:DisplayObject; private var buttonDownState:DisplayObject; private var buttonOverState:DisplayObject; private var buttonHitTestState:DisplayObject; private var urlRequest:URLRequest; public function UpPanel() { urlRequest = new URLRequest("upStateButton.jpg"); pictLoader.load(urlRequest); buttonUpState = pictLoader.content; urlRequest = new URLRequest("downStateButton.jpg"); pictLoader.load(urlRequest); buttonDownState = pictLoader.content; urlRequest = new URLRequest("overStateButton.jpg"); pictLoader.load(urlRequest); buttonOverState = pictLoader.content; buttonHitTestState = pictLoader.content; button = new SimpleButton(buttonUpState, buttonOverState, buttonDownState, buttonHitTestState); button.x = 50; button.y = 50; addChild(button); } }}
Тут, конечно, не поисковик моих ошибок в коде, но будьте добры, объясните что не так?
Re: Создание своей кнопки
Добавлено: 22 июн 2012, 23:00
sanych_dv
Код: Выделить всё
package{ import flash.display.*; import flash.events.*; import flash.net.*; public class UpPanel extends Sprite { private var button:SimpleButton; private var _loc:Object = {}; private var pics:Array = ["upStateButton", "downStateButton", "overStateButton"]; private var cnt:int = 0; public function UpPanel() { for (var i:int = 0; i < pics.length; i++) { _loc["loader" + i] = new Loader; _loc["loader" + i].name = pics[i]; _loc["loader" + i].contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); _loc["loader" + i].load(new URLRequest(String(pics[i] + ".jpg"))); } } private function onLoadComplete(e:Event):void { cnt++; _loc[e.currentTarget.loader.name] = e.currentTarget.content as Bitmap; cnt == pics.length ? buildButton() : null; } private function buildButton():void { button = new SimpleButton(_loc["upStateButton"], _loc["overStateButton"], _loc["downStateButton"], _loc["overStateButton"]); button.x = button.y = 50; addChild(button); } }}
Re: Создание своей кнопки
Добавлено: 07 авг 2012, 19:24
Casperovskii
По образу и подобию попробовал сделать свои кнопки, но уже три штуки. Итог - не выводятся на экран. Кода вроде немного, сам уже закопался. Протяните биты помощи.
Главный класс приложения - MainForm:
Код: Выделить всё
package { import flash.display.*; public class MainForm extends Sprite { private var rightPanel:RightPanel; public function MainForm() { rightPanel = new RightPanel(); addChild(rightPanel); } }}
И пользовательский класс RightPanel:
Код: Выделить всё
package { import flash.net.*; import flash.display.*; import flash.events.*; public class RightPanel extends Sprite { private var buildingButton:SimpleButton; // кнопки, размером 98*15 (ширина/высота) private var armyButton:SimpleButton; private var warButton:SimpleButton; private var buttonAndImageLoaders:Object = {}; // загрузчики для картинок кнопок и миникарты private var count:int = 0; //количество загруженных изображений private var num:int = 0; //номер загрузки private var pics:Array = ["upStatebuildingButton", "downStatebuildingButton", "overStatebuildingButton"]; //массив имен кнопок public function RightPanel() { for (var i:int = 0; i < pics.length; i++) { count++; count == pics.length ? num++ : null; buttonAndImageLoaders["loader" + i] = new Loader; buttonAndImageLoaders["loader" + i].name = pics[i]; buttonAndImageLoaders["loader" + i].contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); buttonAndImageLoaders["loader" + i].load(new URLRequest(String("Images/" + pics[i] + ".jpg"))); } count = 0; pics = ["upStatearmyButton", "downStatearmyButton", "overStatearmyButton"]; for (i = 3; i < pics.length+2; i++) { count++; count == pics.length ? num++ : null; buttonAndImageLoaders["loader" + i] = new Loader; buttonAndImageLoaders["loader" + i].name = pics[i-3]; buttonAndImageLoaders["loader" + i].contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); buttonAndImageLoaders["loader" + i].load(new URLRequest(String("Images/" + pics[i-3] + ".jpg"))); } count = 0; pics = ["upStatewarButton", "downStatewarButton", "overStatewarButton"]; for (i = 6; i < pics.length+5; i++) { count++; count == pics.length ? num++ : null; buttonAndImageLoaders["loader" + i] = new Loader; buttonAndImageLoaders["loader" + i].name = pics[i-6]; buttonAndImageLoaders["loader" + i].contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); buttonAndImageLoaders["loader" + i].load(new URLRequest(String("Images/" + pics[i-6] + ".jpg"))); } createBuildingButton(); createArmyButton(); createWarButton(); } private function onLoadComplete(e:Event):void { buttonAndImageLoaders[e.currentTarget.loader.name] = e.currentTarget.content as Bitmap; } private function createBuildingButton():void { buildingButton = new SimpleButton(buttonAndImageLoaders["upStatebuildingButton"], buttonAndImageLoaders["overStatebuildingButton"], buttonAndImageLoaders["downStatebuildingButton"], buttonAndImageLoaders["overStatebuildingButton"]); addChild(buildingButton); buildingButton.x = 0; buildingButton.y = 0; } private function createArmyButton():void { armyButton = new SimpleButton(buttonAndImageLoaders["upStatearmyButton"], buttonAndImageLoaders["overStatearmyButton"], buttonAndImageLoaders["downStatearmyButton"], buttonAndImageLoaders["overStatearmyButton"]); addChild(armyButton); armyButton.x = 0; armyButton.y = 15; } private function createWarButton():void { warButton = new SimpleButton(buttonAndImageLoaders["upStatewarButton"], buttonAndImageLoaders["overStatewarButton"], buttonAndImageLoaders["downStatewarButton"], buttonAndImageLoaders["overStatewarButton"]); addChild(warButton); warButton.x = 0; warButton.y = 30; } }}
При запуске приложения ошибок нет, но в итоге - белый экран. Help.
Re: Создание своей кнопки
Добавлено: 08 авг 2012, 11:09
sanych_dv
Вы вызываете функции
Код: Выделить всё
createBuildingButton(); createArmyButton(); createWarButton();
до того, как завершилась загрузка картинок, а надо делать вызов в слушателе onLoadComplete.
Кроме того, все лоадеры у вас работают одновременно и имеют один слушатель COMPLETE. В таком случае в слушателе надо поставить счетчик картинок и запускать билд-функции после того, как загрузились все изображения.
PS. Для мультизагрузок очень удобно использовать LoaderMax из библиотеки com.greensock.loading :
http://www.greensock.com/loadermax/