Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Простой счётчик. (http://www.flasher.ru/forum/showthread.php?t=212590)

Comer 19.03.2016 15:57

Простой счётчик.
 
Подскажите, пожалуйста, как сделать простой переключатель swf, чтобы при каждом клике на кнопку цифры в динамическом поле менялись в порядке возрастания.
Помогите, пожалуйста! Очень нужно!

undefined 19.03.2016 16:36

Это же элементарно,Ватсон!
Код AS3:

var n:uint=0;
myTF.text=n+"";
myBtn.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void {
n++;
myTF.text=n+"";
}

myBtn, myTF - кнопка и текстовое поле соответственно.

Tails 19.03.2016 16:36

undefined,
У чисел есть метод toString()

Comer 19.03.2016 16:40

Цитата:

Сообщение от undefined (Сообщение 1192801)
myBtn, myTF - кнопка и текстовое поле соответственно.

Огромное Вм спасибо! Всё работает!

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

Сообщение от Tails (Сообщение 1192802)
undefined,
У чисел есть метод toString()

Но теперь есть задачка посложнее. Мне нужно, чтобы после того, как пользователь накликает какое-то число, закроет приложение, а потом при его повторном открытии в поле было бы видно то число, которое было при закрытии.
Я знаю, что сделать это можно, используя метод SharedObject. Но это и всё. Увы!
Не могли бы Вы мне подсказать, как сохранить последнее число, чтобы оно показывалось при повторном открытии приложения?

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

Сообщение от Tails (Сообщение 1192802)
undefined,
У чисел есть метод toString()

Вот у меня есть код, который должен сохранять последнее число, на котором было закрыто приложение. Но в данном случае он не работает. Что тут надо изменить, чтобы заработало?

Код AS3:

var sharedObj:SharedObject = SharedObject.getLocal("frameSave");
 
 
save_mc.addEventListener(MouseEvent.CLICK, save_click);
load_mc.addEventListener(MouseEvent.CLICK, load_click);
 
 
function save_click(e:MouseEvent):void
{
        sharedObj.data.frameNum = myTF.text=n+"";
        trace("Сохранёно число", sharedObj.data.frameNum );
}
 
function load_click(e:MouseEvent):void
{
        var frame:Number = sharedObj.data.frameNum;
        if(frame)
        {
                myTF.text=n+"";
                trace("Загружено число", frame);
        }
}

Здесь save_mc - кнопка для сохранения последнего числа,
load_mc - кнопка для загрузки последнего числа.

Wolsh 19.03.2016 18:10

Просто определитесь, где и как Вы это число обзываете.
Код AS3:

function save_click(e:MouseEvent):void
{
        sharedObj.data.frameNum = n;
        myTF.text=n+"";
        trace("Сохранёно число", sharedObj.data.frameNum );
}
 
function load_click(e:MouseEvent):void
{
        var frame:Number = sharedObj.data.frameNum;
        if(frame)
        {
                myTF.text=frame+"";
                trace("Загружено число", frame);
        }
}


Comer 19.03.2016 18:18

Цитата:

Сообщение от Wolsh (Сообщение 1192806)
Просто определитесь, где и как Вы это число обзываете.

Ага, понятно. С этим разобрался. Уже загружается нужное число. Но только опять возникла проблема. При дальнейшем кликании на кнопку отсчёт идёт не с загруженного числа, а с 1 (с единицы). Как это можно победить?

Wolsh 19.03.2016 18:23

Просто определитесь, где и как Вы это число обзываете.

Кликами Вы изменяете n, а то, что читаете из SO, называете frame.
Это две разных переменных. Может, так?
Код AS3:

function load_click(e:MouseEvent):void
{
        n = sharedObj.data.frameNum;
        if (n)
        {
                myTF.text=n+"";
                trace("Загружено число", n);
        }
}


Comer 19.03.2016 18:30

Цитата:

Сообщение от Wolsh (Сообщение 1192808)
Может, так?

Точно! Именно так! Огромное Вам спасибо!
Мой самый любимый форум! Всегда подскажут, помогут...

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

Сообщение от Wolsh (Сообщение 1192808)
Кликами Вы изменяете n, а то, что читаете из SO, называете frame.

Знаете, я вот начал собирать воедино свой проект, и выяснилось, что мне недостаточно того, что при каждом клике на кнопку числа идут в порядке возрастания только на 1. А можно как-то сделать так, чтобы при каждом клике они увеличивались, ну скажем, на 5 ? Я пробовал самостоятельно изменить код, но у меня ничего не получилось. Я добился только того, что они стали увеличиваться на 10, или 100. А мне нужно на 5.
Сможете мне помочь с этим разобраться?

KiL33 20.03.2016 15:37

как то так
Код AS3:

var n:uint=5;
myTF.text=n+"";
myBtn.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void {
        var count:uint = uint(myTF.text)+n;
        myTF.text=count+"";
}


undefined 20.03.2016 16:59

вообще странно как можно догадаться как увеличивать на 100, но на 5 не осилить.

Comer 21.03.2016 09:51

Цитата:

Сообщение от KiL33 (Сообщение 1192830)
как то так

Спасибо Вам большое! Мне не хватило мозгов додуматься вот до этой строчки:
Код AS3:

var count:uint = uint(myTF.text)+n;


caseyryan 21.03.2016 11:01

Цитата:

Сообщение от Comer (Сообщение 1192837)
Спасибо Вам большое! Мне не хватило мозгов додуматься вот до этой строчки:
Код AS3:

var count:uint = uint(myTF.text)+n;


Ну а если там будет не uint? Эта строчка чревата багами в программе. uint или unsigned integer (целое беззнаковое) это положительное целое число. Если там будет отрицательное (по какой-то причине), то результат будет очень странный. Лучше использовать parseInt(myTF.text)+n;[

Comer 21.03.2016 11:37

Вложений: 1
Цитата:

Сообщение от caseyryan (Сообщение 1192838)
Ну а если там будет не uint? Эта строчка чревата багами в программе. uint или unsigned integer (целое беззнаковое) это положительное целое число. Если там будет отрицательное (по какой-то причине), то результат будет очень странный. Лучше использовать parseInt(myTF.text)+n;[

Понял. Учту. Спасибо!
Тут у меня теперь новая головная боль. Пытаюсь сохранить последнее число, чтобы при повторном открытии ролика оно появилось на экране. Но что-то я, видимо, не то делаю. Не появляется! Может поможешь? Я вложил swf, чтобы ты мог посмотреть.

Код AS3:

var n:uint=5;
myTF.text=n+"";
myBtn.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void {
var count:uint = parseInt(myTF.text)+n;
myTF.text=count+"";
}
 
 
var sharedObj:SharedObject = SharedObject.getLocal("frameSave");
 
 
save_mc.addEventListener(MouseEvent.CLICK, save_click);
load_mc.addEventListener(MouseEvent.CLICK, load_click);
 
 
function save_click(e:MouseEvent):void
{
        sharedObj.data.frameNum = parseInt(myTF.text);
        parseInt(myTF.text);
        trace("Сохранёно число", sharedObj.data.frameNum );
}
 
function load_click(e:MouseEvent):void
 
        {
                parseInt(myTF.text);
                trace("Загружено число", sharedObj.data.frameNum);
        }


caseyryan 22.03.2016 08:41

Цитата:

Код AS3:

function load_click(e:MouseEvent):void
 
        {
                parseInt(myTF.text);
                trace("Загружено число", sharedObj.data.frameNum);
        }


Что ты пытаешь сделать здесь? У тебя просто парсится то, что есть текстовом поле на данный момент. Но с результатом ничего не делается.
Тебе нужно записать в текстовое поле то, что у тебя есть в шерд объекте
То есть что-то типа этого:
Код AS3:

myTF.text = sharedObj.data.frameNum.toString();

Вот, написал тебе простой пример счетчика с сохранением.
Обрати внимание, что тут значение получается не из текстового поля, а хранится в отдельной переменной.
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.net.SharedObject;
        import flash.text.TextField;
 
 
        public class SimpleCounter extends Sprite {
 
 
                private static const SHARED_OBJECT_NAME:String = "counter";
 
                private var _tf:                        TextField                = null;
                private var _value:                        int                                = 0;
                private var _sharedObject:        SharedObject        = null;
 
                public function SimpleCounter() {
                        stage.addEventListener(MouseEvent.CLICK, onClick);
 
                        _sharedObject        = SharedObject.getLocal(SHARED_OBJECT_NAME);
                        // при загрузке приложения, проверяем сохранено ли что-то в куках
                        if (_sharedObject.data.hasOwnProperty("counterValue")) {
                                _value = _sharedObject.data.counterValue;
                        }
 
                        _tf                        = new TextField();
                        _tf.text                = _value.toString();
                        addChild(_tf);
                }
 
                private function onClick(e:MouseEvent):void {
                        _value ++;
                        // сохраняем
                        _sharedObject.data.counterValue = _value;
                        _tf.text = _value.toString();
                }
 
        }
 
}

Если ты не вводишь в него значение вручную, то лучше сделать именно так.

Comer 22.03.2016 17:02

Цитата:

Сообщение от caseyryan (Сообщение 1192848)
Если ты не вводишь в него значение вручную, то лучше сделать именно так

Ух ты! Сам бы я до такого кода не додумался. У меня ещё не так много знаний. Но, как говорится, век живи - век учись. Спасибо тебе за урок и помощь!
Классный форум! Доброжелательные форумчане! Пусть всё у вас будет хорошо!


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

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