ゲーム中のリールの動きを実際の回転にする方法は?

このQ&Aのポイント
  • 現在、スロットのゲームを作成していますが、絵柄のリールを実際の回転のように動かしたいです。現在は絵柄を並べて上に戻す方法で動かしていますが、3リールを回すと動きが遅くなる問題があります。SWF自体の容量は小さく、原因がわかりません。解決方法や別のアプローチについて教えてください。
  • ゲームのリールを実際の回転にするための方法が知りたいです。現在は絵柄のリールを一定の距離移動させて回転させていますが、3リール以上回すと動きが遅くなってしまいます。SWF自体の容量は小さく、原因がわかりません。解決策や別のアプローチについて教えてください。
  • スロットゲームのリールを実際の回転にする方法について知りたいです。現在は絵柄を移動させて回転させる方法を使っていますが、3リール以上回すと動きが遅くなってしまいます。SWF自体の容量は小さく、原因がわかりません。問題の解決方法や別のアプローチについて教えてください。
回答を見る
  • ベストアンサー

素早い動き

現在スロットのゲームを作っていまして、 リールの回転中はなんとなく回ってるっぽい絵を揺らして表現していたのですが、 これを実際のリールが回っているようにしたいと思っています。 今は、以下のように絵柄を並べてそれぞれonEnterFrameでthis._y+=30などとし、 this._yがある程度大きくなったら上に戻して回転しているように見せる、という方法で動かしています。 kaiten_1.onEnterFrame = function(){ this._y += 30; if(this._y > 325.9){ this._y = -714.1; } } これはこれでちゃんと動くのですが、3リールを回したときに、 昔のシューティングゲームで画面に弾が多くなったときのように 動きが遅くなってしまいます。 リールをストップボタンで止めていくと、残ったリールの回転速度は上がります。 swf自体の容量は100kb以下とそんなに重くもないので 原因がよくわかりません。 これを解決する方法はわかりますでしょうか? もしくは今やっている方法の他に、この動きを実現する方法があれば教えていただけますでしょうか?

  • tkmojo
  • お礼率62% (116/186)
  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

現物を見るわけにも行かないので何とも言えませんね。 言えることは「描画処理が頭打ちしている」という当たり前の結論でしょう。 スクリプトも、それを見る限りとんでもない処理をしているようには見えません。 ただ100個や1000個のリールがあるとそういう現象も起こるでしょうね。 数個~数十個のリールでは普通は何の障害もなく動くと思います。 もし、アルファやブラー(Flashのフィルタ)やドロップシャドウ(Flashのフィルタ)を使っていると、 数個のリールでもとてつもなく重くなることがあります。 特にフィルタ系画像処理はCPUにかなりな負担を与えます。 もしその辺を使っていらっしゃったら、 そのフィルタ効果を無くすとかなり軽くなると思います。 > swf自体の容量は100kb以下とそんなに重くもないので ファイル容量と動作の鈍さは普通関係しないので、これまた何とも言えません。 この 100KB の大半は、 ひょっとしてベクタ画像データ(FlashやIllustratorで描いたドローの絵)の容量でしょうか? もしそうだとすると、 かなりな絵(かなり複雑であったり、複雑でなくてもかなりの枚数の絵)が入っていることになります。 もしそうだとすると(そうだとした場合です)、 思い切ってビットマップ画像(BMP・JPEG・GIF・PNGなど)にしてしまうのも良いかもしれません。 例えば、 リール1本分の絵を新規ドキュメントなどにコピペして、 そのドキュメントから イメージの書き出し で、 リールの絵の BMP や JPEG を書き出して、 それを読み込んでリールに使用するとかです。 ベクタ画像は複雑でなければ容量は軽いですが、 数値データをPCがモニタ表示用にビットマップ演算しないと表示できないため 描画速度が遅くなりUPUに負担を与えます。 ビットマップ画像は、最初からビットマップデータですから、 容量は重いですが動作は軽いです。 複雑な画像になればなるほど動作の差は歴然とします。

tkmojo
質問者

お礼

回答ありがとうございます。 まさに仰る通りでした。 容量は軽い方がいいのかと思い、イラレから引っ張ってきたベクタ画像を多用していました。 透過を使用しているのでPNGで書き出したのですが、全く重さを感じない動きになりました。 動きのあるものは出来るだけビトマップ画像にした方がいいということですね。 非常に勉強になりました。 ありがとうございます。

関連するQ&A

  • ActionScriptで思うような動きを出せず、困っています

    *質問* 現在、ActionScriptを基本的な勉強から初めているのですが、 どうしても分からないところがあり戸惑っております。 皆さんお助言をどうぞお願い致します。 x座標:0.0、y座標:536.5から減速をしながら平行に移動し、 x座標が650以上になったら、x座標:35、y座標:25に向かい、 後方斜め上に移動するという動きを、作っていたのですが、 なかなかうまくいきません。 Scriptは下記の通りに記載致しました。 ============================ onLoad = function(){ maru1.Gox = 700; maru1.Goy = 25; flg = false; } maru1.onEnterFrame = function(){ this._x += (maru1.Gox - this._x)/10; if(this._x >= 650){ maru1.Gox = 35; flg = true; } if(flg = ture){ this._y += (maru1.Goy - this._y)/10; } } ============================ 初歩的な質問で大変申し訳ございませんが、 助言をどうぞよろしくお願い致します。 “環境”Mac OS 10.4、Flash8

  • スロットゲームのプログラミング

    お世話になります。 先日からスロットゲームに関して、質問しているものなのですが、リールが止まる時のタイミングについて質問です。 ボタンをクリックすると、回転し自然に止まるスロットなのですが、絵柄を用意してパラパラ漫画の要領で回転を再現してます。 各リール用にタイマーを設置して、1リール目が止まると、2リールのインターバルを0にして、止める構造に してあるのですが、1~3リールとも同じタイミングで止まってしまいます。 タイマーウェイト処理も停止絵柄の前で止まり、ウェイト後にカックンと止まる始末。 自然にポン、ポン、ポンと止まるように処理するには どうしたら用意でしょうか。 またご指導のほどよろしくお願いします。

  • ドラッグ中の回転を止めたいのですが…

    ドラッグができて,なおかつクリックすると90度回転するようにするため,サンプル集を見てムービークリップ(sikaku_mc)に 次のようなアクションスクリプト(以下AS)を書きました。 もともと解説にあったのですが,これだとドラッグしている最中も 回転してしまいます。クリックすると回転しても ドラッグしているときは回転しないようにするためにはどうすればいいでしょうか。 ちなみにこのASはムービークリップ(sikaku_mc)の編集画面のタイムラインに書き込んだものです。 function onPress() { this.startDrag(false); var xm:Number = this._xmouse; var ym:Number = this._ymouse; this._x = _root._xmouse; this._y = _root._ymouse; sikaku_mc._x -= xm; sikaku_mc._y -= ym; this.onEnterFrame = mawasu; this.onMouseMove = updateStage; } function updateStage() { updateAfterEvent(); } function mawasu() { this._rotation += 90; } this.onRelease = this.onReleaseOutside=stopDragMe; function stopDragMe() { this.stopDrag(); delete this.onEnterFrame; delete this.onMouseMove; } ご教授よろしくお願いします。

    • ベストアンサー
    • Flash
  • 再生スライダーと連続再生について。

    再生スライダーと連続再生について。 今、複数の外部swfをA.swfの置いたmcによんで 連続再生ができるものを作成しています。(01.swf<-02.swf) 再生スライダーも作ろうと、A.swfにseek_mcとbar_mcを使って設置しました。 つまみのseek_mcをドラッグしたり、動画と一緒に動いたりなどは出来たのですが、 終点までドラッグすると01.swfのはじめに戻ってしまします。 何もしなければ次のファイルをちゃんと再生してくれます。 いろいろ、入力して試してはいるのですが、まったく上手くいきません。 何かいい方法はないでしょうか?? よろしくお願いいたします。 flash8を使っています。 以下は、スライダーの置いてあるフレームに記入したASです。 また、01.swf02.swfに変更はできないので、 A.swfのフレームASを記入してgotoAnd...とenterframe にて連続再生ができるようにしてあります。 var left = this.bar_mc._x+this.seek_mc._width/2; var top = this.bar_mc._y; var right = left+this.bar_mc._width-this.seek_mc._width; var bottom = this.bar_mc._y; this.seek_mc._x = this.bar_mc._x; this.seek_mc._y = this.bar_mc._y; this.seek_mc.onPress = function() { _root.stop(); delete _root.onEnterFrame; this.startDrag(false, _root.left, _root.top, _root.right, _root.bottom); this.onMouseMove = MoveFrame; }; this.seek_mc.onRelease = function() { this.stopDrag();  var p = (this._x-_root.bar_mc._x)/(_root.bar_mc._width-this._width); _root.gamen_mc.gotoAndPlay(Math.floor(_root.gamen_mc._totalframes*p)); _root.onEnterFrame = _root.MoveSeek; delete this.onMouseMove; }; function MoveFrame() { var p = (this._x-_root.bar_mc._x)/(this.bar_mc._width-this._width); _root.gamen_mc.gotoAndStop(Math.floor(_root.gamen_mc._totalframes*p)); } function MoveSeek() { var p = _root.gamen_mc._currentframe/_root.gamen_mc._totalframes; this.seek_mc._x = _root.left+(this.bar_mc._width-this.seek_mc._width)*p; } _root.onEnterFrame = MoveSeek;

    • ベストアンサー
    • Flash
  • スロットマシンの判定方法(VB6での作成)

    お世話になります。 仕事で急にVB6を使ってスロットマシンを作成することに、 なったのですが、はじめて使うVBに戸惑っております。 今のところ、イメージボックスにビットマップデータを入れ、Form loadにデータとしておいて、各リール用にタイマーを用意し、何回か回転すると、タイマーのインターバールを0にして、止めるというところまでは出来たのですが リールデータは回転絵柄の為、停止時に表示する絵柄以外にも回転中の絵柄がはさんであります。 これを回転させ、ランダムに停止絵柄で止めて絵柄が揃ったら配当するといった判定方法が思いつきません。 ぜひご指導のほど、お願いします。 また参考サイトなども教えていただけるとありがたいです。

  • onRelease文での動作について・・・。

    ムービークリップをボタンにして、その階層の最初のフレームに this.onRollOver = function() { this.onEnterFrame = this.nextFrame; }; onRelease=function(){ var num:Number=0 onEnterFrame=function(){ trace("LOOP num ="+num) num ++ if(num>30){ delete onEnterFrame } } } stop() 最後のフレームに this.onRollOut = function() { this.onEnterFrame = function() { if (this._currentframe > 1) { this.prevFrame(); } }; }; とした場合について質問です。 ボタン上にカーソルがある場合は30までカウントされます。 しかし、クリック直後にカーソルがボタン上から離れるとカウントが停止します。 ボタンから離れてもカウントを続けるにはどうすればよいでしょうか?? ちなみに、このスクリプトは簡単に流れが分かるように作ったものなのでfor文などではなくonEnterFrame~での対処法を教えて下さい。 実際にはonEnterFrame以下はもっと長くなっているので・・・。 どうかお願いしますっ!!! m(_ _)m

    • ベストアンサー
    • Flash
  • マウスアウトしているのに、マウスオーバーのままになってしまいます。

    よろしくお願いいたします。 ↓このようなものを作っています。(実際に参考にしているサンプルです。) http://www.oshige.com/flash/mx/swf17/divide_x.html スクリプトは --------------------------------- this.init(); this.onEnterFrame = function() { if (base.hitTest(_root._xmouse, _root._ymouse, false)) { this.rollover(); } else { this.rollout(); } this.resize(); this.setalpha(); }; 以下、function init、function rollout、function rollover、function resize、function setalphaが続きます。 --------------------------------- 最下層のレイヤーに「base」という名前のムービークリップを、ドキュメントと同じサイズ、x=0、y=0で配置。 その上に実際に動かしたいムービークリップが乗っていて、「base」にマウスオーバーしている時にそれぞれのムービークリップの動きをコントロールするというものです。 ですが、マウスを速く動かした時などに、baseからマウスアウトしているにも関わらず、マウスオーバーの状態のままになってしまいます。 色々試してみたところ、実際にbaseやムービークリップが乗っているサイズよりもドキュメントのサイズをかなり大きく取ると解消されたのですが、(サンプルでもそのようになっていました)それではページデザイン上問題があるので・・ スクリプトでどうにかできるものでしょうか? どうぞよろしくお願いいたします。 全然意味が分からない説明になっているかもしれません。不明な点がありましたらご指摘ください。

    • ベストアンサー
    • Flash
  • 複数のムービークリップについて

    毎度すみません。 複数のムービークリップ(以下MC)をステージに時間差でバラバラの位置に登場させたいのですが、最初で行き詰まってしまいましたのでご質問させてください。 5個のMC(1~5)をステージに配置し、インスタンス名をmc1~mc5で振っています。 スクリプトレイヤーに以下の様に記述しています。 ------------ for(i=1;i<5;i++){ var mc = this["mc"+i]; mc.num = i; } mc.num._visible = false; mc.num._alpha = 0; //MCを時間差で任意の位置に表示 var t=0; this.onEnterFrame = function(){ t++; if(t==25){ mc1._visible = true; mc1.onEnterFrame = function(){ this._y = 50; } } if(t==50){ mc2._visible = true; mc2.onEnterFrame = function(){ this._y = 100; } } if(t==75){ mc3._visible = true; mc3.onEnterFrame = function(){ this._y = 150; } } //以降、mc4、mc5は省略 } --------- --------- mc.num._visible = false; mc.num._alpha = 0; --------- の部分で、デフォルト時はmc1~5を非表示にしているつもりが、 最初から表示されてしまいます。 初心者なので、近いフラッシュを見よう見真似で作成しています。 根本的に記述法を間違えておりましたら、恐れ入りますがご指摘ください。 またもっと効率的な方法がありましたら、ご教授いただければ幸いです。 Flash8.0、ActionScript2.0で制作しています。

    • ベストアンサー
    • Flash
  • onEnterFrameの中止

    お世話になります。 1フレームには下記のようにマウスに追従させています。 function moveCross() { this._x = _root._xmouse; this._y = _root._ymouse; } closs.onEnterFrame = moveCross; 1フレームのメニューから2フレームに進んだ時に、この追従をさせないようにしたいのですが できません。delete onEnterFrameを使えばいいとわかったのですが。 すみませんが、教えてください。

    • ベストアンサー
    • Flash
  • [Flash]actionscript2.0を用いて歯車を作りたいのですが

    Adobe FLASH CS2を使い2つのかみ合った歯車を制作しています。 ドラッグで片方の歯車を回転させると もう片方の方は逆回転になるはずですが、 うまいことactionscriptをかくことができません。 片方はこのようなactionscriptを使っているのですが うまい作り方はないでしょうか。 よろしくおねがいします。 on (press) { //このMCの基準点からのマウス座標を取得 rx0 = _root._xmouse-this._x; ry0 = _root._ymouse-this._y; //このMCの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0*rx0+ry0*ry0); //マウスによる回転の差分を算出 tr0 = (Math.PI/2+Math.atan2(ry0, rx0))*180/Math.PI-this._rotation; //onEnterFrame を定義 this.onEnterFrame = function() { //現在のMCの基準点からのマウス座標を取得 rx1 = _root._xmouse-this._x; ry1 = _root._ymouse-this._y; //このMCの回転を計算 this._rotation = (Math.PI/2+Math.atan2(ry1, rx1))*180/Math.PI-tr0; //このMCの移動を計算 }; } on (release, releaseOutside) { //この onEnterFrame を削除 delete this.onEnterFrame; }

専門家に質問してみよう