PDA

Просмотр полной версии : Вызов функции и возврат значения


ndez
14.04.2011, 11:44
Доброго времени суток. Я начинающий. Сразу извеняюсь за терминологию (если где что не так написал). Есть вот такой код- это упращенная версия исходного кода:
Главный класс. Здесь контейнеры в которые помещают изображения.

package {
import flash.display.Sprite;
import flash.display.Stage;

[SWF(width = "640", height = "480")]

public class Main extends Sprite {
public var contener:Sprite;
public var contenerA:Sprite;
public var contenerB:Sprite;
public var a;

public function Main() {
contener = new Sprite;
contenerA = new Sprite;
contenerB = new Sprite;
stage.frameRate = 24;
addChild(contener);

contener.addChild(contenerA);
contener.addChild(contenerB);

a = new A(this);
}
}

}

Класс А. Здесь добавляется картинка в один из контейнеров и происходит отслеживания нажатия клавиши пробел.

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Bitmap;
import flash.display.Stage;

public class A extends Sprite {
private var photo1:Bitmap;
public var ss;
[Embed(source='../photo1.png')] public var Photo1:Class;
public var main:Main;
private var space:Boolean;

public function A (mamain) {

main = mamain;

photo1 = new Photo1;
main.contenerA.addChild(photo1);

main.stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);
main.stage.addEventListener(KeyboardEvent.KEY_UP, key_up);
addEventListener(Event.ENTER_FRAME, onEnterFrame);


}
function key_down(e:KeyboardEvent) {
if (e.keyCode==32) {
space = true;
}
}
function key_up(e:KeyboardEvent) {
if (e.keyCode==32) {
space = false;
}
}
function onEnterFrame(event:Event):void {
if (space == true) {
ssss();
}
function ssss() {
ss = new B(main);
}
}
}
}

Класс B.

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Bitmap;
import flash.display.Stage;

public class B extends Sprite {
public var main;
private var photo2:Bitmap;
private var photo3:Bitmap;
private var photoX;
private var ccc;
public var cc:C;
[Embed(source='../photo2.png')] public var Photo2:Class;
[Embed(source='../photo3.png')] public var Photo3:Class;

public function B(mamain) {

main = mamain;
photo2 = new Photo2;
photo3 = new Photo3;

/*Здесь нужен вызов функции variantPhoto () из класса С, который вернет значение variant и присвоит его переменной ссс
*/
if (ccc==1) { photoX = photo2; }
if (ccc == 2) { photoX = photo3; }
photoX.x = 200;
photoX.y = 300;
main.contenerB.addChild(photoX);

}
}

}

По нажатию пробела в классе В добовляется на сцену еще какртинка, а вот какая - зависит от класса С. Вопрос как создать функцию (или метод ) которая вызовет класс С и вернет необходимое занчение???

Класс С.
package {
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Stage;
import flash.display.Sprite;


public class C extends Sprite {
public var variant:Number;
private var ors;
public var main:Main;

public function C (mamain) {

main = mamain;


main.stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);

}

private function key_down(e:KeyboardEvent) {
if (e.keyCode == 49) {
variant = 1;
}
if (e.keyCode == 50) {
variant = 2;
}
if (e.keyCode == 51) {
variant = 3;
}
if (e.keyCode == 52) {
variant = 4;
}
}
//значение variant нужно вернут в класс В
private function variantPhoto() {
return variant;
}

}
}

Мне очень хотелось разобраться в этом вопросе, особенно в плане параметров и аргументов метод и конструкторов. Заранее благодарен.

gloomyBrain
14.04.2011, 12:39
В классе B подпишитесь на нажатие пробела. В классе C создайте функцию, которая будет принимать код клавиши и возвращать номер варианта.
В обработчике клавиатуры в классе B вызывайте функцию класса С и получайте Ваш вариант. Для того чтобы все заработало у B должна быть ссылка на экземпляр класса C. Если ссылку на экземпляр C передать сложно/неудобно, сделайте эту функцию статической.

ndez
14.04.2011, 13:15
А разве данная функция не вернет значение нужного варианта
private function variantPhoto() {
return variant;
}

Вообще то я не совсем понял зачем классу В подписываться на нажатие пробела. По нажатию пробела и так картинка вставляется на сцену. Может я конечно и не прав, но я предполагал написать в конструкторе класса В что то типа:
cc = new C();
ccc = cc.variantPhoto();

только получается ошибка, а какие аргументы или параметры писать в скобках я не знаю. Вот по этому и спрашиваю.

BezDelnik
14.04.2011, 14:35
для начала
public function variantPhoto():Number {
return variant;
}

ndez
14.04.2011, 18:53
Результат получил путем перенесения слушателя клавиш выбора картинок в класс В, класс С вообще удалил. Но очень бы хотелось в плане общего развития узнать возможно ли при данном раскладе реализовать вызов метода и возврат значения и как это сделать.