• ベストアンサー

flashのクラスで

クラスのプロパティでurlと画像を設定したいのですが、 書き方が分かりません。 class a{ private var url (URL:String); private var picture (URL:String); } これは間違っているでしょうか。 この書き方はあっていますか? すみませんがお願いします。 var url=new()。。と書くのでしょうか? クラスを複製して、 それが個々に別々のurlを持つようにしたいです しみませんがお願いします

noname#70071
noname#70071
  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

” private ”を付けて宣言した変数は、その名の通り、クラスの内部で私的に使用されるプロパティになります。 クラスの外に公開し、スクリプトで  オブジェクト名.プロパティ名 の形で参照できるようにするには” public ”を付けます。 何も付けずに宣言した変数や関数は public と見なされるので、省略しても構いません。 ActionScript 2.0 のクラスの場合ですが、1つのクラスにつき1つの as ファイル(外部 ActionScript ファイル)を作成して定義します。 as ファイルにはクラス名と同じ名前を付けます。例えば、クラス” A ”を定義する as ファイルは、” A.as ”という名前で保存します。 フォルダにいくつかのクラス定義ファイルをまとめて整理(パッケージ化)することもできますが、今回は扱いません。 とりあえず、作ってみるとしましょう。 お使いの Flash のバージョンが書かれていませんので、さしあたって Flash 8 を例に説明します。 「ファイル」メニュー→「新規...」で、”一般”のタブから” ActionScript(AS)ファイル”を選択してください。 「アクション」パネルと同様のスクリプト編集画面になりますから、クラスを定義するスクリプトを書きます。 今回のクラスは、単純に、new 演算子でオブジェクトを作る際にパラメータを2つ受け取り、これをクラスのプロパティに設定するだけのものとします。 クラスを定義するスクリプトは、大体、次のようになります。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  class A  {   //画像のURLとタイトルを保持するプロパティ   public var url:String;   public var picture:String;   //コンストラクタ   //引数 pic_url:URL pic_title:画像タイトル   public function A( pic_url:String , pic_title:String )   {    //プロパティに引数の値を設定する    this.url = pic_url;    this.picture = pic_title;   }  } このスクリプトを、” A.as ”の名前で、このクラスを使う fla ファイルと同じフォルダに保存してください。 **************************** 次に、クラスを使う fla ファイルを作成します。 クラスは ActionScript 2.0 以降で使用できます。1.0 でも似たようなことは可能ですが、いわゆるクラスとは少し違いますので、ここでは 2.0 のクラスとして話を進めます。 「パブリッシュ設定」で ActionScript のバージョンが 2.0 になっていることを確認して、以下のようなスクリプトをフレームに記述してみてください。  import A;  //オブジェクトを作成  pic_obj1 = new A( "http://okwave.jp/" , "トップ" );  pic_obj2 = new A( "http://okwave.jp/qa3482975.html" , "この質問" );  //チェック  trace( "URL = " + pic_obj1.url );  trace( "タイトル = " + pic_obj1.picture );  trace( "URL = " + pic_obj2.url );  trace( "タイトル = " + pic_obj2.picture ); 「ムービープレビュー」で、確認してみてください。 「出力」パネルに   URL = http://okwave.jp/   タイトル = トップ   URL = http://okwave.jp/qa3482975.html   タイトル = この質問 と表示されれば、成功です。 ----------------------------------------------------------- クラスのオブジェクトが作られる時、クラス内にある、クラス名と同じ名前を持つ関数が最初に呼び出されます。 この関数を”コンストラクタ”と言います。 コンストラクタは、作られたオブジェクトがこれから行う処理のために必要な初期設定などを済ませることが主な目的ですが、初期設定の必要がなければ、何もしない空っぽの関数にしておくこともできます。 (なお、クラスにコンストラクタが定義されていない時は、何もしないコンストラクタが自動的に作成されます) 今回のコンストラクタでは、new A で渡されてくる2つのパラメータをそれぞれ、プロパティである url と picture に設定しています。 クラス A の中では、url と picture という2つの変数を定義しています。 public を付けているので、この2つは公開されるプロパティです。 普段のスクリプトの中では  オブジェクト名.url  オブジェクト名.picture で参照できます。 今回は受け取ったパラメータを、単にプロパティに代入しているだけですが。 例えば URL の” http:// ”が抜けていたり、パラメータが2つ必要なのに1つしかなかったなど、何らかの不備がある場合も考えられます。 これからの処理に悪影響を及ぼす可能性はないか、コンストラクタの中でチェックし、問題があるならそれなりの処理をしてからプロパティに設定すると、より頑丈なクラス設計になります。 クラスの話は複雑です。 本当に単純で基本的なクラスの例ですが、ご参考までに。

noname#70071
質問者

お礼

ものすごく詳しく説明くださり ありがとうございます。 すぐには理解できないのですが 何度か考えながらゆっくり見てみます。 本当にありがとうございました!!!! すみません><

関連するQ&A

  • クラス作成

    C#にてクラス作成をしております。その中で疑問に思った点を質問させていただきます。 画像を枠内に表示させるクラス 実装すべき変数:枠番号、パス、 映像を枠内に流すクラス 実装すべき変数:枠番号、パス、再生時間 Flashを枠内に流すクラス 実装すべき変数:枠番号、パス など色々なクラスがあってそれをまとめたクラスを作成中です。 上記のクラスを実装するにあたって、共通の変数はクラスにしてしまい それを継承しましょうと言う指示がありました。これはどういった使い方をするものなのでしょうか? class Class2 { public int no { get; set; } public string path { get; set; } } class Movie : Class2 {    public float time{get;set;} public void Play(int frameNo, string path, float playtime){} } class Picture: Class2 {    public void Show(int frameNo, string path){} } これをForm1.cs内で Class2 cls = new Class2(); cls.path = "C:\\test"; cls.no = 11; とかすれば MovieやPictureで使いまわしができると思いきや MovieやPictureをNewすれば初期化されてしまう為、何か根本的に 私の考えが間違ってると思います。 共通の変数を別のクラスにしておいて継承して使うというのはどういった使い方をするのでしょうか? よろしければ例で教えていただけないでしょうか

  • C#クラスについて教えてください

    下記通りクラスを作成した場合、プロパティaを配列にできますか? class Class1 { public string a { set; get; } public int b { set; get; } public int c { set; get; } } イメージとしては下記通りにしたいのですが、なかなかうまく行きません。 class Class1 { public Class1(int x) { } public string a[x] { set; get; } public int b { set; get; } public int c { set; get; } } private void Form1_Load(object sender, EventArgs e) { Class1 f = new Class1(2); f.a[0] = "asdf"; f.a[1] = "asdfa"; f.a[2] = "asdfasd"; f.b = 1; f.c = 2; } 初心者なんで、やさしく教えてください。お願いします。

  • クラスの初期値設定について

    早速ですが、教えてください(開発環境は WindowsXP,VisualBasic.NET2003 です) Public Class CCC Private Key As Integer Private Value As String End Class 上記のようなクラスを用意して Public Sub SSS() Dim III() As CCC = New CCC() {{1, "VALUE1"}, _ {2, "VALUE2"}} End Sub といった具合に初期値を設定したいのですが、 コンパイルエラー(配列初期化子の次元が多すぎます。)に なってしまいます。(ほかに思いついた記述パターンも試してみましたがだめでした) 仕方なく、CCCに下記のようなメソッドを作って Public Class CCC Private Key As Integer Private Value As String Public Sub SetValue(ByVal a As Integer, ByVal b As String) Key = a Value = b End Sub End Class このメソッドを利用し Public Sub SSS() Dim III() As CCC III(0).SetValue(1, "VALUE1") III(1).SetValue(2, "VALUE2") End Sub 上記のように初期値を設定するようにしています。 初期化子({})をつかって、C言語?風に初期値を設定することは できないのでしょうか? 上記の例では、顕著に現れてませんが、クラスの中のクラスにも 初期値を設定しようとする場合、どのような初期値が設定されて いるかが、ソース上、整然と並ばなくなってしまい、修正しにくい 、見た目が美しくない状態になってしまいます。 何かよい方法はないのでしょうか?ご教示願います。 (参考URLだけでもかまいません、よろしくお願いします)

  • 継承元クラスのプロパティを参照する手段

    お世話になります。 ActionScrip3に関する質問です。 現在、カスタムクラスを勉強しております。 外部クラスでClassA、ClassBを作成し、 ClassAにある処理の途中でClassBを実行し、ClassBの中からClassAのプロパティを参照しにいく 処理を行いたいと思い、ClassBのコンストラクタからClassAのプロパティをtraceしました。 プロパティppt2は「かきくけこ」が出力されましたが、ppt1は「null」になってしまいました。 恐らく、タイムラインからClassAに対して設定したプロパティの値は見にいけていないようですが、 タイムラインから設定したプロパティの値を継承したClassBから参照しにいく方法はありますでしょうか? 下記ソースと同じ方法でなくても結構ですので、タイムラインから設定した スーパークラスのプロパティ値をサブクラスから参照・変更できる方法を ご教授いただければと存じます。 お手数ではありますが、宜しくご教授ください。 宜しくお願いいたします。 /* タイムライン側の処理 -----------------------*/ var test:ClassA = new ClassA(); test.ppt1 = "あいうえお"; test.goNext(); /* ClassAの処理 -----------------------*/ package {  // インポート記述は省略  public class ClassA {   var ppt1:String;   var ppt2:String = "かきくけこ";   // コンストラクタ   public function ClassA() { }   public function goNext():void {    var classb:ClassB = new classB();   }  } } /* ClassBの処理 -----------------------*/ package {  // インポート記述は省略  public class ClassB extends ClassA {   // コンストラクタ   private function ClassB() {    trace(ppt1);    trace(ppt2); }  } }

    • ベストアンサー
    • Flash
  • as3 ムービークリップにビットマップデータを挿入するクラスがうまくい

    as3 ムービークリップにビットマップデータを挿入するクラスがうまくいかない 上記のとおりなんですが、 前提として ■ライブラリにjpgを一枚読み込んで、Photoというクラス名でリンケージしてあります。 ■ステージにmcというムービークリップを配置しています。 mcにビットマップ化したjpgをaddchildしたかったので、 メインフレームに下記を書きました。 -------------------------------------------------------- var name_str:String = "Photo"; var myClass:Class = Class(getDefinitionByName(name_str)); var bmd:BitmapData = new myClass(0, 0); var bm:Bitmap = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; mc.addChild(bm); -------------------------------------------------------- ※今後動的に生成するのでクラス名は変数にしています。 これは問題なく行きました。 上記を外部クラス化したかったので、 下記のようにしました。 ■PhotoClass ---------------------------------------------------------------------- package { import flash.display.MovieClip; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.getDefinitionByName; import flash.display.PixelSnapping; public class PhotoClass extends Bitmap { private var myClass:Class;//クラス名 private var bmd:BitmapData; private var bm:Bitmap; //コンストラクタ public function PhotoClass(_name:String) { myClass = Class(getDefinitionByName(_name)); bmd = new myClass(0, 0); bm = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; init(); } public function init():Bitmap { return bm; } } } ---------------------------------------------------------------------- ■メインフレーム var photoAdd:Bitmap = new PhotoClass("Photo"); mc.addChild(photoAdd); これがうまくいきません。 エラーはないのですが、ちゃんとmcに画像が読み込まれません。。。。 ご教授いただければと思います!

    • ベストアンサー
    • Flash
  • VBAでクラス設定

    (標準モジュール) Option Explicit Sub test() Dim Class As Class1 Set Class = New Class1 Class.Obj = 1000 Set Class = Nothing Set Class = New Class1 Range("a1").Value = Class.Obj Set Class = Nothing End Sub (クラスモジュールClass1) Option Explicit Private a As Integer Public Property Get Obj() As Integer Obj = 2000 End Property Public Property Let Obj(ByVal NewNumber As Integer) a = NewNumber End Property 上のマクロではやり取り1変数になってますがこれを配列に変えたいのですがどうすればいいでしょうか?

  • クラスの使い方が分からない

    文字列を返すというクラスbを作りました。 bは引数が1つあって、引数に与えられた文字の手前に"f"を挿入した文字を返します。 結果は"fh"となることを期待しました。 期待通りになるように修正していただけませんか? public class a {  public static void main (String args[]) {   String g = b("h");   System.out.println("Hello World!!");  } } public class b {  b(String c){   d(c);  }  private String d(String c) {   String e = new String("f" + c);   return e;  } }

  • 違うクラスからの変数の共有化

    一つのクラスの中にある変数の値を、二つの別なクラスから呼び出して、その二つのクラスのどちらから変数を参照しても同じ値が帰ってくるようにしたいのですが、いろいろ調べてもできなかったので質問させていただきますm(_ _)m // 共有化させたい変数を持つクラス // Var.java public class Var{  public static int i;  public Var(int i){ this.i = i; }  public Var(){}  public static void getI(){   return i;  } } //クラス1 //Class1.java public class Class1{  Var var = new Var(1); } //クラス2 //Class2.java public class Class2{  Var var = new Var();  System.out.println(var.getI()); } とした場合、Class1を実行し、次にClass2を実行すると、クラス1で定義した変数の値である 1 が戻ってくるようにしたいのですが、上記の方法では、Class2を実行すると結果は 0 になってしまいました。 まだまだ習い始めたばかりでいまいちstaticを使い切れていないと思います・・・ たとえば、PrintStreamクラスの public static final PrintStream out というのはどこから参照しても同じ結果なのでそのようなやり方で大丈夫だろうと思ったのですが・・・ このような方法では共有化させることはできないのでしょうか?またできないのでしたらほかのやり方がもしあった場合は教えていただきたいと思います。 どうかお願いします。

    • ベストアンサー
    • Java
  • クラスについて

    クラスについてご教示下さい。 ------------------------------ main.php ------------------------------ <?php include("./a.php"); include("./b.php"); ・ ・ ・ $a_class = new a; $b_class = new b; $b_class->view_sum; ・ ・ ・ ?> ------------------------------ a.php ------------------------------ <?php class a { VAR $int1 = 10; VAR $int2 = 5; function exec_sum(){ $int_sum = $int1 + $int2; return $int_sum } function XXXXXX(){ ・ ・ ・ } } ?> ------------------------------ b.php ------------------------------ <?php class b { function view_sum(){ ※クラスaのexec_sumを呼び出した結果を表示したい。 print ○○○; } function YYYYYY(){ ・ ・ ・ } } ?> ------------------------------------ として結果として15を表示したいと思っております。 ※あくまでの上記動作の可否を知りたいため、ロジックの構成については仕方なくです。。。すみません。 クラスを宣言するmain.phpではすでにclass_a, class_bで宣言していることが前提となります。 この場合、class_bから、class_aのfunctionを呼び出すにはどうすればよいのでしょうか? そもそも呼び出せるのでしょうか? お忙しいところ申し訳ありませんが、ご教示お願いいたします。

    • ベストアンサー
    • PHP
  • エレメントクラス?

    Javaを勉強しているのですが、 web系で有るJavaBeansのような機能を javaアプリケーソン等でもエレメントクラス?と言って使えるらしいのですが、 どの様に使えばいいのでしょうか、 JavaBeansだと public class 名前{ private String num; public void setNumd(String num)  { this. num= num;  } public String getNum()  {    return this.num; } } この様な構造で、 newしてセットやゲットしいたりすると思いますが(サーブレット上)、 エレメントクラスではどうしたらいいのか分かりません? エレメントクラスの構造は基本構造はJavaBeans(上記)と同じで、 public class 名前{ private String num;  コンストラクタ( String num ) { setNum(num) } コンストラクタ( クラス型 名) { this. num= num; } public void setNumd( String num )  { this. num= num;  } public String getNum()  {    return this.num; } } 上記の様に2つのコンストラクタ追加された構造らしいのですが、 JavaBeansの同じようにnewしてセットやゲットしいようとしてもうまく出来ません? 教えてもらったエレメントクラスで調べても言葉としては出てくるのですが、 詳しい情報がなくセットやゲットしかたや構造が上記の様でいいのか分かりません、 まだ、初歩の初歩までしかやっていないので済みませんが教えて下さい。

専門家に質問してみよう