Skip to content

Instantly share code, notes, and snippets.

@illuzor
Created November 10, 2012 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save illuzor/4051201 to your computer and use it in GitHub Desktop.
Save illuzor/4051201 to your computer and use it in GitHub Desktop.
package screens
{
import elements.Button;
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import tools.Bitmaps;
/**
* Класс главного меню игры.
* Тут отображется фон, логотип и четыре кнопки.
*
* @author illuzor
*/
public class MainMenu extends Sprite {
/** кнопка "PLAY" */
public var playButton:Button;
/** кнопка "EXIT" */
public var exitButton:Button;
/** кнопка "SETTINGS" */
public var settingButton:Button;
/** кнопка "SCORES" */
public var scoresButton:Button;
/**
* В конструкторе просто слушаем добавление на сцену
*/
public function MainMenu() {
addEventListener(Event.ADDED_TO_STAGE, adddedToStage);
}
/**
* Создаём и добавляем фон, логотип, кнопки
*
* @param e событие добавления на сцену
*/
private function adddedToStage(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, adddedToStage);
// создаём битмап фона и добавляем его на сцену
var background:Bitmap = Bitmaps.backgroundBitmap;
background.smoothing = true;
addChild(background);
placeBackground(background); // позиционируем фон
// создаём битмап логотипа, задаём размер относительно ширины сцены
// задаём положение и добавляем на сцену
var logo:Bitmap = Bitmaps.logoBitmap;
logo.smoothing = true;
logo.width = stage.stageWidth * .7;
logo.scaleY = logo.scaleX;
logo.x = (stage.stageWidth - logo.width) / 2;
logo.y = stage.stageHeight / 5;
addChild(logo);
// контейнер для кнопок для удобного позиционирования этих кнопок
var buttonsContainer:Sprite = new Sprite();
addChild(buttonsContainer);
// создание кнопок "PLAY", "SETTINGS", "SCORES", "EXIT", подгонка их размеров и добавление в контейнер
playButton = new Button("PLAY");
buttonsContainer.addChild(playButton);
playButton.width = stage.stageWidth / 2;
playButton.scaleY = playButton.scaleX;
settingButton = new Button("SETTINGS");
buttonsContainer.addChild(settingButton);
settingButton.width = stage.stageWidth / 2;
settingButton.scaleY = settingButton.scaleX;
settingButton.y = buttonsContainer.height + 25;
scoresButton = new Button("SCORES");
buttonsContainer.addChild(scoresButton);
scoresButton.width = stage.stageWidth / 2;
scoresButton.scaleY = scoresButton.scaleX;
scoresButton.y = buttonsContainer.height + 25;
exitButton = new Button("EXIT");
buttonsContainer.addChild(exitButton);
exitButton.width = stage.stageWidth / 2;
exitButton.scaleY = exitButton.scaleX;
exitButton.y = buttonsContainer.height + 25;
// позиционирование контейнера с кнопками
buttonsContainer.x = (stage.stageWidth - buttonsContainer.width) / 2;
buttonsContainer.y = ((stage.stageHeight - logo.height - logo.y) - buttonsContainer.height) / 2 + logo.height + logo.y;
}
/**
* Эта функция делает так, что переданный ей DisplayObject заполняет собой всю сцену
* без изменения пропорций. В нашем случае это фоновое изображение
*
* @param scaledObject DisplayObject для подгонки
*/
private function placeBackground(scaledObject:DisplayObject):void {
scaledObject.scaleX = scaledObject.scaleY = 1;
var scale:Number;
if (scaledObject.width / scaledObject.height > stage.stageWidth / stage.stageHeight){
scale = stage.stageHeight / scaledObject.height;
}
else {
scale = stage.stageWidth / scaledObject.width;
}
scaledObject.scaleX = scaledObject.scaleY = scale;
scaledObject.x = (stage.stageWidth - scaledObject.width) / 2;
scaledObject.y = (stage.stageHeight - scaledObject.height) / 2;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment