PDA

Просмотр полной версии : работа с классами AS2


ktotam
04.12.2006, 14:38
Привет!
Возник вопрос такого рода:
есть фаил Клип.as который наследует свойства класса мувиклип, как в него передавать данные которые бы вставлялись в метод при нажатии на него, например
обьект1.нажали=removeMovieClip()
обьект2.нажали=trace('hello')вот сам класс(рабочий):

class Клип{
private var _mc:MovieClip
//private var _isActive:Boolean
/*Constructor*/
function Клип(timeline:MovieClip, _Клип:String,_ИМЯ:String,_СЛОЙ:Number, _х:Number, _у:Number/*, isActive:Boolean*/){
/*Initialize the level counter*/
//if (_global.lvl == undefined)_global.lvl = 0
_mc = timeline.attachMovie(_Клип, _ИМЯ, _СЛОЙ)
_mc._x = _х;
_mc._y = _у;
/*_isActive = isActive
if (!_isActive) _mc._visible = false
_global.lvl++}*/

}

public function getClip():MovieClip{return _mc}
public function collides(sp:Клип):Boolean{return _mc.hitTest(sp.getClip())}
/*Getter / Setter for _isActive property*/
/*public function get isActive():Boolean{return _isActive}
public function set isActive(flag:Boolean):Void{_isActive = flag
if (_isActive )_mc._visible = true;
else _mc._visible = false
}*/
public function get x():Number{return _mc._x}
public function get y():Number{return _mc._y}
public function set __x(__x:Number):Void{_mc._x = __x}
public function set __y(__y:Number):Void{_mc._y = __y}
public function getWidth():Number{return _mc._width}
public function getHeight():Number{return _mc._height}
public function set __width(__width:Number){_mc._width =__width}
public function set __height(__height:Number){_mc._height=__height}

}
[iNils: Для оформления своего кода, надо использовать теги ]

etc
04.12.2006, 14:42
У тебя классы так по-русски и называются?

ktotam
04.12.2006, 15:58
да, так и называются, в этом ошибки нет на флеше2004про, если что пишите не русские я переделаю, главное чтоб работало

etc
04.12.2006, 16:39
А почему у тебя «_y», а не «_ИГРЕК»? :D
Вообще-то все должно быть по-английски.

А ещё, я так и не понял, что ты хочешь сделать.

FourSide
04.12.2006, 16:54
"... при нажатии на него..." - это событие onPress / onRelease. Переопределяйте эти события (или одно из них) и всё будет.

По коду ничего не понятно - названия методов и классов по-русски - жутчайший моветон, особенно вкупе с комментариями по-английски. Желания разбирать такой код нет.
Ну и как таковой вопрос до конца неясен - что именно не получается из двух задач: отлов нажатия на мувик или передача данных?

ktotam
04.12.2006, 20:22
Вот все по английски, в библиотеке объект, “a” –кружок, с помощью класса создаться объект
var pepsi: Sprite =new Sprite (_root,"a","pepsi",5,100,100);
var cola: Sprite =new Sprite (_root,"a","cola",6,200,200);
то есть на экране появляется 2 кружокa,
что надо написать в классе чтобы я мог написать что-то в роде:
pepsi.onPress = function(){
fscommand("quit");
}
cola.onPress = function(){
attachMovie("a", "fanta", 1);
}




class Sprite{
private var _mc:MovieClipprivate
var _isActive:Boolean
function Sprite(timeline:MovieClip, sourceMc:String, nameMc:String, sloi:Number, px:Number, py:Number){
_mc = timeline.attachMovie(sourceMc, nameMc, sloi)
_mc._x = px
_mc._y = py
}
}

etc
04.12.2006, 20:30
_mc.onRelease = function() {
…
}
А если нужно перенаправить вызов в метод класса — нужно использовать Delegate, ищи на форуме примеры.

ktotam
05.12.2006, 20:20
извените, я почитал про Delegate, попробывал, не получилось...
вот мой класс

class Bot{
private var _mc:MovieClip
function Bot(timeline:MovieClip, _Clip:String, px:Number, py:Number,func:Function){
_mc =timeline.attachMovie("_Clip", "_Clip",1);
_mc._x=px;
_mc._y=_py;
_mc.onPress = func();
}
}


создаю объект, чтобы при нажатии вызывался новый
var a:Bot=new Bot(_root,«a»,10,10,_root.attachMovie("a","a2",5));

может, что не так пишу, прошу конкретной помощи

etc
06.12.2006, 11:08
class Bot{
private var _mc:MovieClip
public function Bot(timeline:MovieClip, _Clip:String, px:Number, py:Number,func:Function){
_mc =timeline.attachMovie("_Clip", "_Clip",1);
_mc._x=px;
_mc._y=_py;
_mc.onPress = func;
}
}

import mx.utils.Delegate;
botFunc = function() {
_root.attachMovie("a","a2",5)
}
var a:Bot=new Bot(_root,"a",10,10,Delegate.create(this,this.botFunc));

А вообще так не делается.

з.Ы. На работоспособность не проверял.

ktotam
06.12.2006, 20:20
Почетаемый __etc, неработоспособно, что делать, в чем обшибка? И что я за это тебе должен? :)

etc
06.12.2006, 20:23
Визуально вроде должно работать. Какая версия Flash? Какие ошибки выдает?

з.Ы. Ничего не должен.

ktotam
06.12.2006, 20:35
ошибки не дает, на кнопку нажимаешь, а клип не появляется

etc
06.12.2006, 20:36
Выкладывай всё, что там накрутил.

ktotam
06.12.2006, 20:36
flash 7

ktotam
06.12.2006, 20:37
сейчас, операционку пару раз перегружу, у меня инет на одной, флеш 7 на другой, хотя щас в 6 попробую

ktotam
06.12.2006, 20:54
вот выкладываю

etc
06.12.2006, 21:22
Дома буду — посмотрю.

etc
07.12.2006, 14:31
У меня всё появляется при нажатии. Flash 8.

У тебя случайно не MX 2004 Basic? Если да, то, вероятно, не хватает класса Delegate.

ktotam
07.12.2006, 15:28
MX PRO 2004 v7.0, ладно, попробую Flash 8 найти. Нужен ведь не плеер а именно Flash, да?

etc
07.12.2006, 16:12
Именно, или класс Delegate.

ktotam
08.12.2006, 09:59
Спасибо за помощь, все действительно работает в Flash8. =) как тебя зовут? может пару обьяснений про MouseListener? у тебя SwiftMP3 случаем нет?

etc
08.12.2006, 15:36
Денис я.

Не знаю, что такое MouseListener.

SwiftMP3 нету.

ktotam
08.12.2006, 22:32
Ок еще раз спасибо