Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   передача значений параметров из *.Fla в функцию(метод) подкласса (http://www.flasher.ru/forum/showthread.php?t=134036)

nickorsk 19.12.2009 14:10

передача значений параметров из *.Fla в функцию(метод) подкласса
 
Собственно вопрос.

У меня есть СуперКласс, подкласс и fla файл с прилепленным суперклассом:
СуперКласс(SuperClass.as):

Код AS3:

package com.GameClass.Superclass 
 
{import flash.display.MovieClip;
import flash.events.*; //???
import flash.ui.* ;
import flash.external.*;
 
public class SuperClass extends MovieClip
{
public function SuperClass(){
trace("Привет");}
 
}}


подкласс(to_path.as):

Код AS3:

package com.GameClass.control 
{
import com.GameClass.Superclass.SuperClass;
import flash.events.*; //??? Тут я описал флеш-класс, но можно было сделать так чтобы подкласс
//наследовал все подключаемые флеш-классы из родительского класса(Суперкласса)??
public class to_path extends SuperClass
{
public function to_path(button_name,moveclip_name,to_path:String) /* Вот та самая функция */
 
{
super();
button_name.addEventListener(MouseEvent.MOUSE_DOWN, todo); /* кнопка слушает на нажатии мышки */
function todo(e:MouseEvent):void {  // функция обработки
moveclip_name.gotoAndStop(to_path);};
}
 
}
}

FLA:

Код AS3:

import com.GameClass.control.to_path; 
this.stop();
 
to_path.to_path(panel.b1,stage,"t2"); /*???
я попробовал так передать параметры функции подкласса to_path, но выдается ошибка
"1061: Call to a possibly undefined method to_path through a reference with static type Class."
если закомментировать эту строчку ролик работает, но без нужной функции. */

Еще вопрос если в моем СуперКлассе импортированы флеш-классы (допустим flash.events.*; ), то не будет ли наследовать подкласс импортированные классы в Суперклассе??? Т.е. я допустим не хочу импортировать каждый раз одни и те же флеш-классы в подклассы, а хочу описать их 1-н раз в суперклассе -чтобы они были доступны всем его подклассам.

Obi 19.12.2009 14:34

Что за жесть вы понаписали? Имена классов — ТОЛЬКО с большой буквы. Имена пакетов — ТОЛЬКО с маленькой. Имена методов — с маленькой.

to_path.to_path — это что такое? Вы пытаетесь конструктор вручную вызвать? Конструктор автоматически вызывается при создании экземпляра класса.

nickorsk 19.12.2009 16:01

>Obi
Собственно вопрос в другом состоял.
НА счет имен, вы совершенно не правы, не имеет значения с какой буквы что описывать. Например если задана структура /Gameclass/Control/control.as
При описании пакета:
Код AS3:

package Gameclass.Control

При импорте класса:
Код AS3:

import Gameclass.Control.control.as;

Все будет работать)))
Потому что важно не то с какой буквы описывать, а важно то чтобы описание совпадало с иерархической структурой проекта -в общем сами поробуйте. Можно даже писать так

Код AS3:

gameclass.Control.control.as;

- это просто путь к классу, а как названы папки с большой буквы или с маленькой -не важно, главное учитывать регистр при прописи пути к классам.

П.С. Вопрос я задал не про это.

Zik. 19.12.2009 16:08

Так-то работает, но кодерами принято писать как описал Obi

nickorsk 19.12.2009 16:13

Кому как нравиться)))
Просто учитывается регистр, собственно как во всех приложениях основанных на стандартах C++
Суть в том что ошибки в данном случаи никакой нет на счет букв.

Мне интересно другие вопросы.

iflamberg 19.12.2009 17:11

если хотите заниматься программированием - тогда пишите так, как принято, чтобы другие не ломали глаза, читая ваш код, или вас просто не возьмут на работу. Есть мелкие разногласия, типа переноса "{" и префиксов в названиях функций/свойств класса, но так же есть общепринятые нормы.

конкретно по вопросам:
Цитата:

Еще вопрос если в моем СуперКлассе импортированы флеш-классы (допустим flash.events.*; ), то не будет ли наследовать подкласс импортированные классы в Суперклассе???
Нет так нельзя. Это синтаксис языка, так задумано.
Вообще говоря импорт ничего не делает, кроме как указывает компилятору где глядеть классы, которые вы упомянули в коде. Если поставить импорт import flash.events.*; - это не значит, что ваша флешка станет на весь пакет flash.events.* тяжелее.
Код AS3:

to_path.to_path(panel.b1,stage,"t2"); /*???

здесь ты написал полный бред. У тебя есть экземпляр класса to_path, чтобы вызывать его функцию? Так какого черта ты пытаешься ее вызвать? Именно по-этому программеры и называют классы с большой буквы, чтобы не путаться, где экземпляр класса, а где обращение к классу.

nickorsk 19.12.2009 17:56

Отредактировал так:
СуперКласс:

Код AS3:

package com.gameclass.superclass 
{import flash.display.MovieClip;
import flash.events.*;
import flash.ui.* ;
import flash.external.*;
public class SuperClass extends MovieClip
{
public function SuperClass (str:String = null)
{
trace(str);
}
}}

Подкласс:
Код AS3:

package com.gameclass.control 
{
import com.gameclass.superclass.SuperClass;
 
public class ToPath extends SuperClass
{ 
public function ToPath()
{super("привет");}
public function patha(button_name,moveclip_name,to_path:String)
 
{button_name.addEventListener(MouseEvent.MOUSE_DOWN, todo);
function todo(e:MouseEvent):void { 
moveclip_name.gotoAndStop(to_path);};
 
 /*функция, при нажатии кнопку "button_name" переводит в объекте "moveclip_name"  на кадр с значением имени "to_path" */
 
 
}
}
}

Fla:

Код AS3:

//import com.gameclass.superclass.SuperClass;
import flash.events.*;
import com.gameclass.control.ToPath;
 
var closepaneler:int;
closepaneler=0;
 
var path:ToPath = new ToPath();
//var sup:SuperClass= new SuperClass();
 
 
this.stop();
 
path.patha(panel.b4,this,"t2"); // тут я подставляю значения в мою функцию patha, описанную в подклассе ToPath.
 
closepanel.addEventListener(MouseEvent.MOUSE_DOWN, closepan); // кнопка слушает на нажатии мышки
function closepan(e:MouseEvent):void {  // функция обработки
if (closepaneler==0){
    panel.visible=false; closepaneler=1;
        m1.gotoAndStop("t2");}else{
        panel.visible=true;closepaneler=0;
        m1.gotoAndStop("t1");}
        }

НО выдается ошибка, хотя ролик запускается:
Код AS3:

Error: Error #2136: SWF-файл file:///C|/Documents%20and%20Settings/nickorsk/Desktop/My%20game/file1.swf содержит недопустимые данные.
        at com.gameclass.control::ToPath/frame2()

Добавлено через 5 часов 31 минуту
Я уже все сам сделал)))

Суперкласс вообще не нужен, наоборот надо использовать несовмещенные классы в моем случаи.

Вот такой вопрос, в коде многих сред программирования есть такая очень полезная штука - как переход на метку в коде , при определенном условии - типа goto метка
Во Flash мне как раз нужен переход на метку в коде. Допустим мне при выполнении условия инструкции if в теле функции нужно сразу игнорируя определенный нижний кусок кода перейти в более нижнюю часть кода тела функции, т.е. к метке строки кода.
НУ а если условие инструкции if не выполнено, то дальше продолжать выполнять тело функции.
Если такая возможность в FLASH??

GentleFLASH 20.12.2009 02:29

goto отсутствует так же как и sleep

nickorsk 20.12.2009 14:05

Понятно, Спасибо за ответы.

Obi 20.12.2009 22:07

В своем посте я предположил в чем у вас может быть проблема:
Цитата:

1061: Call to a possibly undefined method to_path
Цитата:

to_path.to_path — это что такое? Вы пытаетесь конструктор вручную вызвать? Конструктор автоматически вызывается при создании экземпляра класса.
Ну и да, очень сложно у вас код читать, по этому чтобы сразу сказать где у вас проблема, нужно сначала три раза перечитать код исходников. На втором с половиной разе мне надоело и я написал свой пост :)


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

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