Просмотр полной версии : Разместить на сцене и тиражировать объект из библиотеки с помощью кода
Как разместить и тиражировать объект из библиотеки на сцену с помощью команд в as.?
1. При чем, объекты должен тиражироваться заданное кол-во раз;
2. Размещаться в ряд с определенным интервалом;
3. И всякий раз при нажатии кнопки, чтоб рандомно менялся состав этих объектов;
undefined
28.04.2015, 09:52
а что конкретно не ясно? Как создать объект из библиотеки?
Присваиваем ему в библиотеке linkage ID и бежим читать про оператор new (http://kharchuk.ru/as3/operators.html#new)
после создания добавляем его на сцену и присваиваем требуемые координаты и прочие аттрибуты.
Чтоб что-то происходило при нажатиях клавиатуры читаем про слушатели (http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e54.html)
Я попытаюсь уточнить вопрос.
1. Мне не понятно как на сцену из библиотеки вытащить объекты и расположить их в ряд (неужели каждому нужно задавать отдельные координаты в ручную?)
2. И что написать для того, чтоб эти объекты в следующий раз (при нажатии кнопки) выводились на сцену по-другому (тоже в ряд, но в другой "рандомной" последовательности)
То есть, мне бы понять с каким типом данных нужно работать, чтоб совершить эти действия, какие функции/методы/события/условия/циклы для этого нужны.
P.S. я совсем новичок.
ZackMercury
28.04.2015, 20:08
1) Нет, можно воспользоваться циклами и математикой.
Вытащить объекты можно с помощью new ИмяКласса.
Разместить в ряд можно примерно так(создаём 10 кругов в ряд):
for(var i:int = 0; i < 10; i ++)
{
var ball:Shape = new Shape();
ball.graphics.beginFill(0xFFFF00);
ball.graphics.drawCircle(0, 0, 20);
ball.x = i * (40 + 5);
addChild(ball);
}
Это создание кругов чисто кодом. Если вытаскивать из библиотеки, то вот так
for(var i:int = 0; i < 10; i ++)
{
var ball:Ball = new Ball();
ball.x = i * (40 + 5);
addChild(ball);
}
При этом мувик/битмап круга должен иметь имя класса Ball.
2. И что написать для того, чтоб эти объекты в следующий раз (при нажатии кнопки) выводились на сцену по-другому (тоже в ряд, но в другой "рандомной" последовательности)
Например?
Например:
В библиотеке лежит 3 шарика, разных цветов, их нужно вытащить на сцену, разместив в ряд 10 штук, т.е. они будут повторяться, типа :
1. желтый; 2. красный; 3. синий; 4. красный; 5. красный; 6. желтый; 7. синий; 8. синий; 9. желтый; 10. красный;
Дальше, есть кнопка, при нажатии на которую эти шарики меняют свои позиции в произвольном порядке, (опять же в ряд 10 штук, но меняются по цветам местами друг с другом)
Вот такая задача.
Помогите :)
undefined
28.04.2015, 20:51
а попробуйте почитать что-нибудь для начала.И там если будет не понятно спрашивайте что не выходит.Для начала спросите у гугла что-нибудь типа actionScript 3.0 для начинающих/чайников.
OlmerDale
28.04.2015, 21:08
Старался сделать как можно проще -
package
{
import fl.controls.Button;
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends Sprite
{
private var _allRects:Array;
public function Main()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private const RED_COLOR:uint = 0xBA2C2C;
private const GREEN_COLOR:uint = 0x5CC032;
private const BLUE_COLOR:uint = 0x3538C8
private const RECT_WIDTH:Number = 100;
private const RECT_HIEGHT:Number = 100;
private const INDENT_HORIZONTAL:Number = 10;
private const INDENT_VERTICAL:Number = 10;
private function init(event:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// вот эта часть кода Вам не нужна - <<< начало
var button:Button = new Button();
button.label = 'click me';
super.addChild(button);
button.stage.addEventListener(MouseEvent.CLICK, stage_clickHandler);
// вот эта часть кода Вам не нужна - <<< конец
this._allRects = [];
// наполняем массив квадратиками разных цветов
// я создаю квадраты так - this.createRect(RECT_WIDTH, RECT_HIEGHT, RED_COLOR)
// потом добавляю их в список отображения super.addChild
// а потом в массив this._allRects.push
// три красных
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, RED_COLOR)));
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, RED_COLOR)));
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, RED_COLOR)));
// три зеленых
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, GREEN_COLOR)));
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, GREEN_COLOR)));
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, GREEN_COLOR)));
// три синих
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, BLUE_COLOR)));
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, BLUE_COLOR)));
this._allRects.push(super.addChild(this.createRect(RECT_WIDTH, RECT_HIEGHT, BLUE_COLOR)));
this.reset()
}
private function stage_clickHandler(event:MouseEvent):void
{
this.reset();
}
private function reset():void
{
this._allRects = this.mix(this._allRects);
const COLUMNS:int = 3;
const ROWS:int = 3;
const START_X:Number = super.stage.stageWidth / 2 - (COLUMNS * RECT_WIDTH + (INDENT_HORIZONTAL * (COLUMNS - 1))) / 2;
const START_Y:Number = super.stage.stageHeight / 2 - (ROWS * RECT_HIEGHT + (INDENT_VERTICAL * (ROWS - 1))) / 2;
const STEP_HORIZONTAL:Number = RECT_WIDTH + INDENT_HORIZONTAL;
const STEP_VERTICAL:Number = RECT_HIEGHT + INDENT_VERTICAL;
var rect:Sprite;
var k:int = 0;
for (var i:int = 0; i < ROWS; i++)
{
for (var j:int = 0; j < COLUMNS; j++)
{
rect = this._allRects[j + k];
rect.x = START_X + STEP_HORIZONTAL * j;
rect.y = START_Y + STEP_VERTICAL* i;
}
k += j;
}
}
private function mix(array:Array):Array
{
var length:int = array.length;
var temporaryValue:Sprite;
var randomIndex:int = 0;
while (length-- > 0)
{
randomIndex = int(Math.random() * length);
temporaryValue = array[length];
array[length] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
private function createRect(width:Number = 20, hieght:Number = 20, color:uint = 0x000000):Sprite
{
var rect:Sprite = new Sprite();
var graphics:Graphics = rect.graphics;
graphics.beginFill(color);
graphics.drawRect(0, 0, width, hieght);
graphics.endFill();
return rect;
}
}
}
rects
Ну ничего себе! :)
Огромное Вам спасибо за проделанную работу!!! (вместо меня)
Мне теперь только разобраться, вникнуть и проанализировать остается.
Спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.