2013-04-16 5 views
0

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

Но мой вопрос в том, что у меня есть мой класс двигателя, который называется keepFocusEngine, а другой класс называется mcStar. Я не сталкивался с этой проблемой, поэтому я не понимаю, как это сделать, но я хочу получить доступ к переменной Integer от mcStar через мой keepFocusEngine. Таким образом, в моем классе mcStar у меня есть целочисленная переменная, называемая private var speed:Number;, которая содержит это в ней speed = 2 + Math.random()*2;. Я хочу, чтобы изменить переменную скорость этой speed = 10 + Math.random()*2; из моих keepFocusEngine через эту функцию:

private function shootPlayerObject(e:TouchEvent):void 
    { 
     if (e.type == TouchEvent.TOUCH_TAP) 
     { 
      btnShootPlayer = true; 
     }else 
     { 
      btnShootPlayer = false; 
     } 
    } 

так, если btnShootPlayer = true; я хочу, чтобы speed = 10 + Math.random()*2; называться дальше.

Извините, если я смутил кого-то, я как бы смущаю себя ха-ха. Но вы понимаете, чего я пытаюсь достичь?

+0

Вы назвали его 'private', это означает, что вы не можете изменить его в то время как это частные. Будет лучше, если вы напишете функцию для своего корабля, которая будет вызываться на конкретном событии, что, в свою очередь, изменит его скорость. – Vesper

ответ

0

Если вы хотите сделать это аккуратно, вы можете написать функции getter/setter в классе keepFocusEngine. Затем вы можете оставить свою переменную speed закрытой. Геттер и сеттер должны быть общедоступными, конечно, чтобы выйти за пределы класса.

В вашем keepFocusEngine добавьте следующее:

public function GetSpeed() : Number 
{ 
    return speed; 
} 

public function SetSpeed(newspeed:Number) 
{ 
    speed = newspeed; 
} 

Тогда вы можете изменить предоставленный код в:

private function shootPlayerObject(e:TouchEvent):void 
{ 
    if (e.type == TouchEvent.TOUCH_TAP) 
    { 
     btnShootPlayer = true; 
     keepFocusEngine.SetSpeed(10 + Math.random()*2); 
    }else 
    { 
     btnShootPlayer = false; 
    } 
} 

Если в какой-то момент вы хотели бы знать скорость, вы можете использование keepFocusEngine.GetSpeed(). Это облегчает программирование, так как у вас есть представление о вашем пути к классам. Кроме того, когда вызывается геттер или сеттер, вы можете делать все, что хотите в этой функции. Если вам кажется, что вам легче всегда возвращать скорость * 10, то геттер может return speed*10;.

EDIT: Я хотел бы сослаться на этот вопрос: Why prefer Properties to public variables?

+0

AS3 фактически поддерживает истинные геттеры и сеттеры. 'public function set varName (значение: DataType): void {}' и 'public function get varName(): DataType {}' –

+0

Спасибо, Joetjah за ответ, попробуй позже, и сообщите, правильно ли он работает! – Nathan

+0

@Apocalyptic, что вы имеете в виду «истинные» геттеры и сеттеры? Как будет работать ваш код выше? – Nathan

Смежные вопросы