- ベストアンサー
Flash時計【デジタルとアナログ】
こんにちは♪最近Flashを使い始めたばかりなんですが、 ●Flashの時計で、デジタルとアナログを統合することは可能でしょうか? もし良かったら、そのスクリプトがあるサイトを教えてください。 よろしくお願いします!!!
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
単に, アナログ時計とデジタル時計を作って, 同じSWF(FLA)内に配置すれば良いだけだと思いますよ。 注意する点は, インスタンス名などがかぶらないようにすることです。 Flash MX 以上をお持ちでしたら, Flash 新規ドキュメントを作成して, フレーム1 に次の長い長いスクリプトをコピペして, 即ムービープレビュー(もしくはパブリッシュ)してもらうと, ステージ上にアナログ時計とデジタル時計が同時に表示されるものが勝手にできると思います。 // ---アナログ時計部分----------------------- // 表示位置と文字の大きさの設定 // x座標(※可変) var my_x = 100; // y座標(※可変) var my_y = 100; // 時計の文字盤のサイズ(半径)を設定 var watch_size = 80; // 文字の大きさ[point](※可変) var moji_size = 18; // // 空のムービークリップ tokei を深度 1 に作成 _root.createEmptyMovieClip("tokei", 1); _root.tokei._x = my_x; _root.tokei._y = my_y; // // 文字盤の作成 // 文字盤の色指定 _root.tokei.beginFill(0x000000, 100); // 文字盤のフチの指定 _root.tokei.lineStyle(6, 0x999999, 100); _root.tokei.moveTo(Math.sin(0)*watch_size, Math.cos(0)*watch_size); for (var i = Math.PI/100; i<Math.PI*2; i += Math.PI/100) { _root.tokei.lineTo(Math.sin(i)*watch_size, Math.cos(i)*watch_size); } _root.tokei.endFill(); // // 文字盤のフチの光沢の作成 _root.tokei.lineStyle(2, 0xffffff, 60); _root.tokei.moveTo(Math.sin(0)*watch_size-1, Math.cos(0)*watch_size-1); for (var i = Math.PI/100; i<Math.PI*2; i += Math.PI/100) { _root.tokei.lineTo(Math.sin(i)*watch_size-1, Math.cos(i)*watch_size-1); } // // 文字盤の 数字 を作成 for (var i = 1; i<=12; i++) { _root.tokei.createTextField("moji"+i, i, 0, 0, 0, 0); with (_root.tokei["moji"+i]) { autoSize = true; text = i; textColor = 0xcccccc; var format0 = new TextFormat(); format0.size = moji_size; setTextFormat(format0); _x = (watch_size*8/10)*Math.sin(Math.PI*i/6)-(_width/2); _y = -(watch_size*8/10)*Math.cos(Math.PI*i/6)-(_height/2); } } // // 上ロゴの作成 _root.tokei.createTextField("rogo0", 13, 0, -watch_size*68/100, 0, 0); with (_root.tokei.rogo0) { autoSize = true; text = "Sassakun"; textColor = 0xcccccc; format1 = new TextFormat(); format1.size = moji_size*5/10; setTextFormat(format1); _x = -_root.tokei.rogo0._width/2; } // 下ロゴの作成 _root.tokei.createTextField("rogo1", 14, 0, watch_size/2, 0, 0); with (_root.tokei.rogo1) { autoSize = true; text = "QUARTZ?"; textColor = 0x999999; format2 = new TextFormat(); format2.size = moji_size*35/100; setTextFormat(format2); _x = -_root.tokei.rogo1._width/2; } // // 短針の作成 // 時計の中の深度21に"tansin" を作成 _root.tokei.createEmptyMovieClip("tansin", 21); with (_root.tokei.tansin) { beginFill(0x333333, 100); lineStyle(1.5, 0xeeeeee, 100); moveTo(-watch_size/20, watch_size/10); lineTo(-watch_size/25, -watch_size/2); lineTo(0, -watch_size*14/25); lineTo(watch_size/25, -watch_size/2); lineTo(watch_size/20, watch_size/10); endFill(); } // // 長針の作成 // 時計の中の深度22に"tyousin" を作成 _root.tokei.createEmptyMovieClip("tyousin", 22); _root.tokei.tyousin.beginFill(0x333333, 100); with (_root.tokei.tyousin) { lineStyle(1.5, 0xeeeeee, 100); moveTo(-watch_size/25, watch_size/10); lineTo(-watch_size/30, -watch_size*7/10); lineTo(0, -watch_size*8/10); lineTo(watch_size/30, -watch_size*7/10); lineTo(watch_size/25, watch_size/10); endFill(); } // // 秒針の作成 // 時計の中の深度23に"byousin" を作成 _root.tokei.createEmptyMovieClip("byousin", 23); with (_root.tokei.byousin) { lineStyle(1.5, 0xffffff, 100); moveTo(0, watch_size/8); lineTo(0, -watch_size*65/100); } // ↑手動でテキストフィールドを作成する場合は以上不要↑ // // // ★やっと時計の針を動かすスクリプト! // 1フレーム進む時間ごとに毎回実行 _root.tokei.onEnterFrame = function() { // 時刻オブジェクト mydate の作成 var myDate = new Date(); // 時・分・秒の取得 var my_h = myDate.getHours(); var my_m = myDate.getMinutes(); var my_s = myDate.getSeconds(); this.tansin._rotation = (my_h*30)+(my_m/2); this.tyousin._rotation = (my_m*6)+(my_s/10); this.byousin._rotation = my_s*6; }; // // // ---「デジタル時計部分」----------------------- // 表示位置と文字の大きさの設定 // x座標(※可変) var my_x2 = 75; // y座標(※可変) var my_y2 = 190; // 文字の大きさ[point](※可変) var my_size2 = 14; // // 空のムービークリップ tokei2 を 深度 1000 に作成 _root.createEmptyMovieClip("tokei2", 1000); // // テキストフィールド mytime を 深度0 に作成 _root.tokei2.createTextField("mytime", 0, my_x2, my_y2, 0, 0); // テキストフィールド mytime のプロパティを設定 _root.tokei2.mytime.border = true; _root.tokei2.mytime.background = true; _root.tokei2.mytime.autoSize = true; // ↑手動でテキストフィールドを作成する場合は以上不要↑ // // 1フレーム進む時間ごとに毎回実行 _root.tokei2.onEnterFrame = function() { // 時刻オブジェクト mydate の作成 var myDate = new Date(); // 時・分・秒の取得 var my_h = myDate.getHours(); var my_m = myDate.getMinutes(); var my_s = myDate.getSeconds(); // 時・分・秒 を2桁に合わせる処理 if (my_h<=9) { my_h = "0"+my_h2; } if (my_m<=9) { my_m = "0"+my_m; } if (my_s<=9) { my_s = "0"+my_s; } // テキストフィールドに時刻を表示 this.mytime.text = my_h+":"+my_m+":"+my_s; // //↓手動でテキストフィールドを作成する場合は以下不要↓ // テキストフィールド のテキストのフォーマット var format = new TextFormat(); format.size = my_size2; _root.tokei2.mytime.setTextFormat(format); //↑手動でテキストフィールドを作成する場合は以上不要↑ }; /* 作成環境:Flash MX 以上 閲覧環境:Flash Player 6 以上 ActionScript 1.0 */ // ---------------------------------------------- ※ 某所で書いたことがあるものの自己改良版です。 適当にアナログ時計とデジタル時計の2つを合わせただけですし, 文字盤や文字なども わざと全てActionScriptで作成していますから, デザインはイマイチ(イマヒャク)ですよ。 実際に作るときはちゃんと描いた方が良いです。 言いたいことは, 上のActionScript を全て理解しましょうと言うことではなく, 2つの時計を作って配置すれば良いだけでは? ということと, 同じ変数名やインスタンス名がかぶると, うまく動作しないことがあるので, 違うインスタンス名を付けたり, 階層が同じ場合のちがう変数名を付けましょう。 ということです。
お礼
ありがとうございます!! なるほど。単純なコトなんですねっ♪ 今試してみたら、デジタルとアナログが統合された時計が出来ました! デザインはこれから考えていきます。 とても参考になりました☆