Понедельник, 23 Декабря 2024, 08:13

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
как сделать переменную видимой в других классах?
VislouhДата: Четверг, 10 Февраля 2011, 20:01 | Сообщение # 1
частый гость
Сейчас нет на сайте
пишу

package game
{


import flash.display.Sprite;

public class cvadrat extends Sprite
{

public var perem1:int=1;

так вот в других классах этого пакета этой переменной не видно,нету к ней доступа, а нужно. таким образом,чтобы изменение в функции одного класса изменяли функцию в другом классе


новичок в изучении actionscript 3.0
WarChiefДата: Пятница, 11 Февраля 2011, 00:44 | Сообщение # 2
частый гость
Сейчас нет на сайте
Я сам не супер специалист конечно, но подозреваю что ты не правильно к ней обращаешся.

Например, импровизированно -

Code


import game.cvadrat;
var my_cvadrat = new cvadrat();
addchild(my_cvadrat);
trace(my_cvadrat.perem1); // - Работает
trace( this.getChildAt(0).perem1 ); // - Ошибка.
trace( (this.getChildAt(0) as cvadrat).perem1 ); // - Работает.

Соответственно раз значение мы можем получить, то при вызове твоей функции из второго класса это значение можно передать ей в качестве параметра функции.

Например в классе2 пишем функцию

Code

...
public function DoSomethingWithPerem1(perem1:int) {
trace(perem1);
}
...
//Вызываем функцию    
    класс2.DoSomethingWithPerem1( (this.getChildAt(0) as cvadrat).perem1 );
...

Если в итоге выполнения функции perem1 должна изменится то так -

Code

public function DoSomethingWithPerem1(perem1:int):int {
trace(perem1);
perem1 += 10;
return perem1;
}

(this.getChildAt(0) as cvadrat).perem1 = класс2.DoSomethingWithPerem1( (this.getChildAt(0) as cvadrat).perem1 );

Если не в этом дело покажи весь код где ты определяешь свои переменные и фунцкции и потом к ним обращаешся, а то непонятно smile

Сообщение отредактировал WarChief - Пятница, 11 Февраля 2011, 01:11
VislouhДата: Пятница, 11 Февраля 2011, 17:56 | Сообщение # 3
частый гость
Сейчас нет на сайте
WarChief, ситуация такая: я создал квадратик с помощью graphics который может появляться на сцене с 3 разными цветами рандомно. это один класс. в другом классе у меня как бы все поведение этих квадратиков описано, то есть есть цикл, который заполняет весь экран этими квадратиками, получается этакий квадрат 12 ни 12 из маленьких квадратиков. далее мне нужно осуществить проверку на совпадение цветов, а так как BeginFill проверить никак нельзя, то я хочу создать такую переменную,которая была бы видна и в одном классе и в другом. она будет класса int, если цвет выбран красный-то присваиваем переменной 1 если желтый-то два,если зеленый-то три. а вот во втором классе,где описывается все поведение квадратиков, мы пишем что если значение переменной одного квадратика равно значению другой-то тогда они одного цвета и соответственно, пишем для них что нибудь в ифе..вот мой код

Code

/////это первый класс, где создаем квадратик  
  import flash.display.Sprite;
   
  public class cvadrat extends Sprite  
  {
   private var cvadratic:Sprite = new Sprite;
   private var color:int;
   public var colorcontrol:int=1;
    
   public function cvadrat()  
    
   {
    color =Math.random() * 4;
    switch(color) {
    case 0:
    color = 0xff0000;
     
    break;
    case 1:
    color = 0x00ff00;
     
    break;
    case 2:
    color = 0x0000ff;
     
    break;
    case 3:
    color = 0xFFA707;
     
    break;
     }
     
     
      
cvadratic.graphics.lineStyle(2);
  cvadratic.graphics.beginFill(this.color);
cvadratic.graphics.drawRoundRect(10, 10, 30, 30, 5, 5);
  addChild(cvadratic);

   }
    
  }

}

Добавлено (11.02.2011, 17:56)
---------------------------------------------
а вот и второй класс

Code

package game  
{
  import flash.display.DisplayObject;
  import flash.display.Graphics;
  import flash.display.Sprite;
  import game.cvadrat;
  import flash.events.Event;
  import flash.events.MouseEvent;
  import game.cvadrat;
   
  public class Cicl extends Sprite  
  {
   public var cubic:cvadrat;
   public var proverka:Boolean = true;
   public var proverka2:Boolean = false;
   private var xx:int;
   private var yy:int;
   private var xxx:int;
   private var yyy:int;
   private var zamena:Sprite;
    
   public function Cicl()  
   {
     
    for (var ctolbec:int=0; ctolbec<12;ctolbec++) {
  for (var rad:int=0; rad<12;rad++) {
   cubic = new cvadrat();
   cubic.addEventListener(MouseEvent.CLICK, this.videlenie);
   cubic.addEventListener(MouseEvent.CLICK, this.vtoroeVidel);
   cubic.name = String(ctolbec) + String(rad);
   cubic.x = (cubic.x + cubic.width)*ctolbec;
   cubic.y = (cubic.y + cubic.height)*rad;
   addChild(cubic);
    
    
    
    
  }
   
}
   
    
   }
    
   private function videlenie(Event:MouseEvent):void {
    
     
        if (this.proverka) {
    var zamena:Sprite = new Sprite;
    zamena.graphics.lineStyle(2, 0xffffff);
    zamena.graphics.drawRoundRect(10, 10, 30, 30, 5, 5);
    zamena.x = (Event.currentTarget as DisplayObject).x;
    zamena.y = (Event.currentTarget as DisplayObject).y;
    xx =(Event.currentTarget as DisplayObject).x;
    yy =(Event.currentTarget as DisplayObject).y;
     addChild(zamena);
     trace("true");
     this.proverka = false;
      
      }
     else {
      this.proverka2 = true;
      trace("false")
      }
      
     
     
    
  }
    
  private function vtoroeVidel(Event:MouseEvent):void {
   if (this.proverka2 && ((Event.currentTarget as DisplayObject).x==xx || (Event.currentTarget as DisplayObject).y==yy)||(Event.currentTarget as DisplayObject).x==xxx || (Event.currentTarget as DisplayObject).y==yyy) {
    
    var zamena2:Sprite = new Sprite;
    zamena2.graphics.lineStyle(2, 0xffffff);
    zamena2.graphics.drawRoundRect(10, 10, 30, 30, 5, 5);
    zamena2.x = (Event.currentTarget as DisplayObject).x;
    zamena2.y = (Event.currentTarget as DisplayObject).y;
    xxx =(Event.currentTarget as DisplayObject).x;
    yyy =(Event.currentTarget as DisplayObject).y;
    addChild(zamena2);
     
    
   }
   else if (this.proverka2) {  
    trace("что то");
     
   }
   else {
    trace("ffff")}
    }
     
     
   
     
  }
   

}


новичок в изучении actionscript 3.0
WarChiefДата: Суббота, 12 Февраля 2011, 03:28 | Сообщение # 4
частый гость
Сейчас нет на сайте
Code

/////это первый класс, где создаем квадратик     
     import flash.display.Sprite;
         
     public class cvadrat extends Sprite     
     {
   //private var cvadratic:Sprite = new Sprite;  - убрать
      private var color:int;
      public var colorcontrol:int=1;
          
      public function cvadrat()     
          
      {
       color =Math.random() * 4;
       switch(color) {
       case 0:
       color = 0xff0000;
           
       break;
       case 1:
       color = 0x00ff00;
           
       break;
       case 2:
       color = 0x0000ff;
           
       break;
       case 3:
       color = 0xFFA707;
           
       break;
        }
           
           
//поменять на такое     
graphics.lineStyle(2);
graphics.beginFill(this.color);
graphics.drawRoundRect(10, 10, 30, 30, 5, 5);

      }
          
     }

}    

Выделил то что надо исправить smile
У тебя получается, что когда ты рисуешь свои квадраты добавляется на экран не объекты класса cvadrat,
а объекты класса Sprite, то есть те самые cvadratic.
Соотв. когда ты кликаеш по ним ты кликаешь не на cvadrat, а на спрайт cvadratic у которого нет свойства colorcontrol.
Остальное комментировать не буду smile

Сообщение отредактировал WarChief - Суббота, 12 Февраля 2011, 03:29
VislouhДата: Суббота, 12 Февраля 2011, 14:25 | Сообщение # 5
частый гость
Сейчас нет на сайте
WarChief, спасибо! точно блин! а я то еще удивлялся когда вешал на них событие removeChild почему это вдруг исчезают сразу все и виснет)) а в данной ситуации помимо указанного вами промаха я должен был еще указать что второй класс является подклассом первого,тогда переменная появляется,и все прекрасно работает

новичок в изучении actionscript 3.0
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг