Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.01.2012, 16:33
Serofody вне форума Посмотреть профиль Отправить личное сообщение для Serofody Найти все сообщения от Serofody
  № 1  
Ответить с цитированием
Serofody

Регистрация: Jan 2012
Сообщений: 5
Tip Переменная возвращается в предыдущее значение.

Здравствуйте. У меня тут такая проблема:
Нужно чтоб при выполнении функции из переменной вычиталось число и сохранялось в этой же переменной. вроде бы просто:
Код AS3:
a-=5
но при таком коде переменная всегда возвращается обратно в 100:
Код AS3:
package Engene {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.*;
 
	public class Test extends MovieClip {
		public var aTest:Number = 100;
		public var bTest:Number = 150;
		public var ataka1:Boolean = false;
 
		public function Test() {
			addEventListener(Event.ENTER_FRAME,fun);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, movingListener);
		}
		public function fun(e:Event):void
		{
			xMethod(aTest);
		}
		public function movingListener(e:KeyboardEvent):void
		{
			if (e.keyCode == 49)
			{
				ataka1 = true;
			}else {
				ataka1 = false;
			}
		}
		public function xMethod(num1):void
		{
			if (ataka1==true) {
			num1-=5
			trace(num1);
			}
		}
при нажатии клавиши 1, он должен из 100 отнимать 5 и сохранить полученное значение, т.е 95. и при последующем выполнении этой функции уже из 95 отнимать 5, а получается что он снова из 100 отнимает.
Подскажите в чем проблема? Возможно чего не углядел)

Старый 30.01.2012, 16:53
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ну чтоже тут непонятного? Вы передаете не ПЕРМЕННУЮ в метод, а значение ).
Тоесть
Код AS3:
xMethod(aTest) == xMethod(100)
И получается
Код AS3:
public function xMethod(num1):void
 
		{
			if (ataka1==true) {
			100-=5
			trace(95);
			}
		}
что вы хотите добиться? Пишите тогда так
Код AS3:
 xMethod(delim:int = 5 )  aTest -= delim
__________________
Марк Tween

Старый 30.01.2012, 16:54
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Потому что простые типы передаются по значению, а не по ссылке.
__________________
тут я

Старый 30.01.2012, 17:05
Serofody вне форума Посмотреть профиль Отправить личное сообщение для Serofody Найти все сообщения от Serofody
  № 4  
Ответить с цитированием
Serofody

Регистрация: Jan 2012
Сообщений: 5
то есть так:
Код AS3:
package Engene {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.*;
 
	public class Test extends MovieClip {
		public var aTest:Number = 100;
		public var bTest:Number = 150;
		public var ataka1:Boolean = false;
 
		public function Test() {
			addEventListener(Event.ENTER_FRAME,fun);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, movingListener);
		}
		public function fun(e:Event):void
		{
			xMethod(aTest,delim:int = 5);
		}
		public function movingListener(e:KeyboardEvent):void
		{
			if (e.keyCode == 49)
			{
				ataka1 = true;
			}else {
				ataka1 = false;
			}
		}
		public function xMethod(num1, delim:int):void
		{
			if (ataka1==true) {
			num1-=delim
			trace(num1);
			}
		}
 
	}
 
}
теперь он совсем ничего не выдает. Если не сложно исправьте тот участок кода который неверный)

Старый 30.01.2012, 17:35
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Я так понял, этот код вообще не ваш? Раз вы не понимаете, что происходит.
__________________
Марк Tween

Старый 30.01.2012, 18:02
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 6  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
package Engene {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.*;
 
	public class Test extends MovieClip {
		public var aTest:Number = 100;
		public var bTest:Number = 150;
		public var ataka1:Boolean = false;
 
		public function Test() {
			addEventListener(Event.ENTER_FRAME,fun);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, movingListener);
		}
		public function fun(e:Event):void
		{
			aTest = xMethod(aTest,var delim:int = 5);
		}
		public function movingListener(e:KeyboardEvent):void
		{
			if (e.keyCode == 49)
			{
				ataka1 = true;
			}else {
				ataka1 = false;
			}
		}
		public function xMethod(num1, delim:int):int
		{
			if (ataka1==true) {
			num1-=delim
			}
			return num1;
		}
 
	}
 
}
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 30.01.2012, 18:58
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Genzo
Цитата:
aTest = xMethod(aTest,var delim:int = 5);
Мне кажется учить людей красочному* второму параметру не стоит )
__________________
Марк Tween

Старый 30.01.2012, 19:39
Serofody вне форума Посмотреть профиль Отправить личное сообщение для Serofody Найти все сообщения от Serofody
  № 8  
Ответить с цитированием
Serofody

Регистрация: Jan 2012
Сообщений: 5
Цитата:
Сообщение от in4core Посмотреть сообщение
Я так понял, этот код вообще не ваш? Раз вы не понимаете, что происходит.
Код то как раз таки мой он на самом деле намного больше, я просто вырезал нужный мне элемент из кода и привел здесь. Раньше я делал через текстовое поле, т.е от содержимого текстового поля отнималось такое значение и все работало, но потом решил что через переменную надежней и качественней получится
Сейчас попробую как Вы посоветовали и отпишусь)

Добавлено через 9 минут
Цитата:
Сообщение от Genzo Посмотреть сообщение
Код AS3:
aTest = xMethod(aTest,var delim:int = 5);
На добавление этого выдает 2 ошибки:
1084: Syntax error: expecting identifier before var.
1084: Syntax error: expecting rightparen before colon.

P.s Добавление идентификатора перед var решило лишь первую ошибку, ну я думаю не в этом соль

Добавлено через 45 минут
Если написать код как Вы в самом начале посоветовали:
Код AS3:
package Engene
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.*;
 
	public class Test extends MovieClip
	{
		public var aTest:Number = 100;
		public var bTest:Number = 150;
 
		public function Test()
		{
			addEventListener(Event.ENTER_FRAME,fun);
		}
		public function fun(e:Event):void
		{
			xMethod(aTest);
			trace(aTest);			
		}
		public function xMethod(delim:Number = 5 ):void
		{
			aTest -= delim
		}
	}
}
тогда trace выдает всегда 0


Последний раз редактировалось Serofody; 30.01.2012 в 20:24.
Старый 30.01.2012, 20:31
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
... блин если код ваш, как можно путаться в такой логике?!

Код AS3:
xMethod(aTest);
trace(aTest);	
public function xMethod(delim:Number = 5 ):void
		{
			aTest -= delim
		}
//
aTest = 100, вместо delim вы кидаете 100. 100-100 = 0;

Задачу можете пояснить нормально? У вас есть переменная, нужно в методе менять значение переменной на определенное число

Код AS3:
xMethod(20);
public function xMethod(delim:Number = 5 ):void
		{
			aTest -= delim
		}
trace(aTest) // 80
Если не понятно почему, стоит начать с азов программирования, но если отсальной код ваш, а тут вы путаетесь - у вас ядерная каша в голове
__________________
Марк Tween


Последний раз редактировалось in4core; 30.01.2012 в 20:38.
Старый 30.01.2012, 20:33
Serofody вне форума Посмотреть профиль Отправить личное сообщение для Serofody Найти все сообщения от Serofody
  № 10  
Ответить с цитированием
Serofody

Регистрация: Jan 2012
Сообщений: 5
написав:
Код AS3:
package Engene
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.*;
 
	public class Test extends MovieClip
	{
		public var aTest:int = 100;
		public var bTest:int = 150;
 
		public function Test()
		{
			addEventListener(Event.ENTER_FRAME,fun);
		}
		public function fun(e:Event):void
		{
			xMethod();
			trace(aTest);			
		}
		public function xMethod(delim:int = 5 ):void
		{
			aTest -= delim
		}
	}
}
все работает как нужно, но только в метод мне нужно запихнуть параметр. Ведь мне нужно не для одного aTest но и bTest
ЗЫ надеюсь задачу пояснил)


Последний раз редактировалось Serofody; 30.01.2012 в 20:35.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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