![]() |
|
||||||||||
|
|||||
|
[+4 06.05.14]
|
Есть 3 текстовых поля, идущих друг за другом.
Есть массив [1,3,5,6,9,12,55....] Есть кнопки перемотки вперед-назад. Подскажите как лучше всего организовать следующее : Изначально в поля помещаются индексы массива [0],[1],[2] соотв. Если нажать вперед то [n][0][1] , еще раз [n-1][n][0] и т.д. Если нажать назад, [1][2][3], [2][3][4] и т.д.
__________________
Марк Tween |
|
|||||
|
Lorem ipsum
|
Цикличность тебе штоле нужно организовать?
Этот метод при любом значении i будет выдавать корректный индекс массива с учетом цикличности. Просто подаешь ему по очереди i, i+1, i+2. Изначально i=0. Потом -- его при "вперед" и ++ при "назад".
__________________
Поймай яблоко 2! |
|
|||||
|
Цитата:
![]() |
|
|||||
|
[+4 06.05.14]
|
Ребята извиняюсь поднимаю тему, начал разбираться и нифига не понял что и как тут делать, причем ни в одном из методов....
сорри объясните дураку.И так у нас есть a = [1,5,6,9,14,2,0]; Изначально поля заполнены так : 1,5,6 соотв по нажатию кнопки вперед в ответ я хочу получить 0,1,5 , а по нажатию назад 5,6,9 соотв. и т.д. циклично
__________________
Марк Tween |
|
|||||
package { import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends Sprite { public const FORWARD:String = "вперед"; public const BACWARD:String = "назад"; private var arr:Array = [1, 5, 6, 9, 14, 2, 0]; private var tfArr:Array = []; public function Main():void { createBut(FORWARD); createBut(BACWARD).x = 100; for (var i:int = 0; i < 3; i++) { var tf:TextField = new TextField(); tf.x = 100 * i; tf.width = 60; tf.height = 20; tf.border = true; tfArr.push(tf); tf.text = arr[i]; addChild(tf); } } private function createBut(text:String):TextField { var tf:TextField = new TextField(); tf.text = text; tf.width = 80; tf.height = 20; tf.y = 30; tf.background = true; tf.backgroundColor = 0xC0C0C0; tf.selectable = false; tf.addEventListener(MouseEvent.CLICK, but_click); addChild(tf); return tf; } private function but_click(e:MouseEvent):void { switch (e.target.text) { case FORWARD: arr.unshift(arr.pop()); break; case BACWARD: arr.push(arr.shift()); break; } for (var i:int = 0; i < 3; i++) { tfArr[i].text = arr[i]; } } } } |
|
|||||
|
Можно через итератор, задаешь текущий элемент, шаг и перебираешь структуру. Если нужно забить первое поле каждым третьим сообщением, создаешь следующее:
var iterator:Iterator = new ItemsIterator(); iterator.listItems = itemsArray; // pre-initialized array of Items iterator.step = 3; iterator.current = 0; var item:Item = iterator.firstItem() while(!iterator.isDone()){ iterator.nextItem(); } public class ItemsIterator { //todo: Implement Iterator interface private var listItems:Array /*of Item*/; private var current:int = 0; private var step:int = 1; public function nextItem():Item { Item item = null; current += step; if (!isDone()) { item = (Item) listItems[current]; } return item; } public function previousItem():Item { Item item = null; current -= step; if (!isDone()) { item = (Item) listItems[current]; } return item; } public function firstItem():Item { current = 0; return (Item) listItems[current]; } public function lastItem():Item { current = listItems.length - 1; return (Item) listItems[current]; } public function isDone():Boolean { return current >= listItems.length ? true : false; } public function currentItem():Item { if (!isDone()) { return (Item) listItems[current]; } else { return null; } } public function set step(int value):void { this.step = value; } public function set current(int value):void { this.current= value; } //todo: public getters/setters for listItems } |
|
|||||
|
[+4 06.05.14]
|
surlac весело но дико громоздко посравнению с предидущим оратором. Впринципе вопрос то и стоял как сделать это поаккуратнее, а через много кода написать это не составит труда
__________________
Марк Tween |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|