トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     ブロック崩しのボールの速度を一定に。
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ebi
Åê¹ÆNo.30085
投稿日時: 2006-11-17 18:39
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: ブロック崩しのボールの速度を一定に。
ebiです。

引用:
らくちんかどうかはebiさん次第なような。。。


んま、そう言われてしまえばそれまでなんですがね(´?`;)ゞ
確認を と。

引用:
4行程度かかるものが、1行ですみますし。そして、なんと!あのFlash 8のスクリプトなら、ActionScript 3.0でもそのまま通ってしまいます。まぁ、なんてお得!


へぇー、通っちゃうんですね。 そういう事もあるのか。

8→9、何が通って何が通らんだかサパリ分からない僕ですが
いつか勉強する時がきたら勉強しようと思います。
(ver.7はなやかりし頃、ver.4をグリグリ使ってた実績アリ)

今のレベルじゃ“4行が1行で済む”って方がお得感、実感です。
わーいわーいと鼻たらし、ぴょんぴょんとんで、よろこんどります。(´ー` )

ありがとうございました。
野中文雄
Åê¹ÆNo.30084
投稿日時: 2006-11-17 18:26
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ブロック崩しのボールの速度を一定に。
まぁ、あるものは使った方が楽とはいえます。3行程度かかるものが、1行ですみますし。そして、なんと!あのFlash 8のスクリプトなら、ActionScript 3.0でもそのまま通ってしまいます。まぁ、なんてお得!
引用:
ebiさんは書きました:
結論からゆって、distanceの方が書式がカンタン(らくちん)って事ですかね?
今回のような目的の場合。


----------------
 

raiha
Åê¹ÆNo.30083
投稿日時: 2006-11-17 18:21
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash MX2004 Pro
Re: ブロック崩しのボールの速度を一定に。
らくちんかどうかはebiさん次第なような。。。


引用:

ebiさんは書きました:
ebiです。
結論からゆって、distanceの方が書式がカンタン(らくちん)って事ですかね?
今回のような目的の場合。
ebi
Åê¹ÆNo.30079
投稿日時: 2006-11-17 17:52
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: ブロック崩しのボールの速度を一定に。
ebiです。
結論からゆって、distanceの方が書式がカンタン(らくちん)って事ですかね?
今回のような目的の場合。
野中文雄
Åê¹ÆNo.30070
投稿日時: 2006-11-17 10:42
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ブロック崩しのボールの速度を一定に。
Math.sqrt()メソッドは平方根の取得ですから、その前に2点の各x、y座標それぞれの差の2乗の和を取らなくてはなりません(ピタゴラスの定理)。

引用:
野中文雄は書きました:
function xDistance(oStartPoint:Object, oEndPoint:Object):Number {
    var nDistanceX:Number = oEndPoint.x-oStartPoint.x;  // x座標の差
    var nDistanceY:Number = oEndPoint.y-oStartPoint.y;  // y座標の差
    // x、y各座標の差を2乗して足した上で、平方根を取る
    return Math.sqrt(nDistanceX*nDistanceX+nDistanceY*nDistanceY);
}

引用:
ebiさんは書きました:
その後、調べてて、2点間の距離を得るモンとして
Math.sqrtってのがあると分かりました。

distanceとの違いはなんでしょうか?


----------------
 

ebi
Åê¹ÆNo.30069
投稿日時: 2006-11-17 10:31
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: ブロック崩しのボールの速度を一定に。
ebiです。
その後、調べてて、2点間の距離を得るモンとして
Math.sqrtってのがあると分かりました。

distanceとの違いはなんでしょうか?
野中文雄
Åê¹ÆNo.30068
投稿日時: 2006-11-17 9:20
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ブロック崩しのボールの速度を一定に。
Pointインスタンスの長さを調べるPoint.lengthプロパティがないのは不便だと思ったら、単に見落としていました。そこで、投稿したサンプルスクリプトは、経過をコメントアウトで残すかたちにして修正しました。

あと、直交座標を極座標に変換するメソッドもあってよい気がしますね。スクリプト書いても、大したことはありませんけど。


----------------
 

ebi
Åê¹ÆNo.30067
投稿日時: 2006-11-17 6:41
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: ブロック崩しのボールの速度を一定に。
ebiです。とても丁寧なご説明ありがとうございました。
だいたいニラんだ通りだったようで良かったです。

今回はもうヘバッてるのでnormalizeは
次の機会で挑戦してみようと思います。
いろいろ使い道ありそうですね、コレ。

おかげさまで、とりあえず形にゃなりました。
こんだけのもんを作るのになんでこんなに時間かかるんだか...
(バカフラ投稿しました)

ってわけで自己レスです。

かなり強引な方法で速度を維持してます。
例えば維持したい速度が8だとして、
パドルに接触してDX、DYとも値が変更された後...

if (DX < 8 && DX > -8) {
 if (DY < 8 && DY > -8) {
  DY = -8;
 }
}


と、こんな風にしました。(´ー` )
タイトルの意味とは異なるんですが、
実際制作したゲーム上ではこれで特に問題ない感じです。
ってわけで収束です。

ありがとうございました。
野中文雄
Åê¹ÆNo.30066
投稿日時: 2006-11-17 4:28
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ブロック崩しのボールの速度を一定に。
importステートメントは、ほかにフィルタを使うときにも必要になります。「スクリプトでフィルタを使う ? BlurFilter」の「1. フィルタのインスタンスを作成する」をご参照ください。
引用:
ebiさんは書きました:
なぜかしら、今日は、
import flash.geom.Point;
って記述をよく見ます。
たいてい、スクリプトの頭に入ってるようです。
いったい何をしてるんでしょうか? これは。

あるものは使ってみただけですので、自分で関数など定義して処理することも可能です。
// 原点(0, 0):
// var p_0:Object = xPoint(0, 0);
// 変更前(10, 10):
var p_1:Object = xPoint(10, 10);
// var nDistance:Number = xDistance(p_0, p_1);
var nDistance:Number = xLength(p_1);
trace(nDistance);
// 変更後(5, 15):
var p_2:Object = xPoint(5, 15);
p_2 = xNormalize(p_2, nDistance);  // 長さを同じに
// trace([p_2.x, p_2.y, p_2.y/p_2.x, xDistance(p_0, p_2)]);
trace([p_2.x, p_2.y, p_2.y/p_2.x, xLength(p_2)]);
function xPoint(nX:Number, nY:Number):Object {
    return {x:nX, y:nY};
}
/*
function xDistance(oStartPoint:Object, oEndPoint:Object):Number {
    var nDistanceX:Number = oEndPoint.x-oStartPoint.x;
    var nDistanceY:Number = oEndPoint.y-oStartPoint.y;
    return Math.sqrt(nDistanceX*nDistanceX+nDistanceY*nDistanceY);
}
*/
function xLength(oPoint:Object):Number {
    var nDistanceX:Number = oPoint.x;
    var nDistanceY:Number = oPoint.y;
    return Math.sqrt(nDistanceX*nDistanceX+nDistanceY*nDistanceY);
}
function xNormalize(oPoint:Object, nLength:Number):Object {
    // var nOriginalLength:Number = xDistance({x:0, y:0}, oPoint);
    var nOriginalLength:Number = xLength(oPoint);
    var nNormalizeRatio:Number = nLength/nOriginalLength;
    return {x:oPoint.x*nNormalizeRatio, y:oPoint.y*nNormalizeRatio};
}

[追記] 投稿No.30050のスクリプト変更に合わせて、上記サンプルもxLength()関数を使う処理に修正しました。
引用:
Pointは分かりました。
が、なんだか、変数に出し入れして自分で管理した方が良さそうな感じです。

Point.distance()メソッドは、「2点間の距離」を返します。
引用:
distanceはリファレンスには「ベベルのオフセット距離」と
...[中略]...
まぁ野中さんのスクリプトから察するになんとなく2点間の距離を
返すもののような気がします。

Point.normalize()メソッドは、方向(角度)は変えずに、長さを指定した値に設定します。ですから、このメソッドが、まさにebiさんの必要とされているものです。
引用:
normalizeは...
(0,0) と現在のポイント間の線のセグメントを設定された長さに拡大・縮小します。

だそうです。...

まず変更前のxy成分(10, 10)の長さを求め、つぎに変更後のxy成分(5, 15)のベクトルを作成し、その長さを(10, 10)と等しく設定します。その結果求められた新たなxy成分のベクトルは、(4.47213595499958,13.4164078649987)です。y/xの比が(5, 15)と同じ3ですので、方向が一致していることになります。
引用:
以上ふまえて考えてみると野中さんのスクリプトは、
まず基準となる点、基準となる距離を決めておき、
変更点の位置が変わったら、基準点から変更点への線上の
基準距離の位置の点を出せば角度も速度(距離)も変わらない
ってな感じの事をされてるんだろうなぁって事は分かりました。


----------------
 

ebi
Åê¹ÆNo.30061
投稿日時: 2006-11-16 23:22
フォーラム芸人
居住地: nagoya
投稿: 926
使用環境:
.6.8
CS6
<参考書>
・基本からしっかりわかるActionScript 3.0(既読)
・ActionScript3.0プロフェッショナルガイド(進行中)
・ActionScript3.0パフォーマンスチューニング(未読)
・ActionScript 3.0 逆引きクイックリファレンス(購入予定...
Re: ブロック崩しのボールの速度を一定に。
森さん、野中さん、どうも。

あ、これ、メソッドじゃないんですね。
なぁんだ、幾何学かぁ(°▽°)

キ...キカ...キキガカ...ガク...キガク...
カカガ...キガキガ...ガクガクガク((((°目°))))

BOMB!  はぜました。

なぜかしら、今日は、
import flash.geom.Point;
って記述をよく見ます。
たいてい、スクリプトの頭に入ってるようです。
いったい何をしてるんでしょうか? これは。
きっと僕が知らないプログラムのセオリーみたいのが
あるんでしょうね。

Pointは分かりました。
が、なんだか、変数に出し入れして自分で管理した方が良さそうな感じです。
distanceはリファレンスには「ベベルのオフセット距離」と
そっけなく書いてありました。...わかんないよう。
(今度は“ベベル”と“オフセット”を国語辞書?
まぁ野中さんのスクリプトから察するになんとなく2点間の距離を
返すもののような気がします。
normalizeは...
(0,0) と現在のポイント間の線のセグメントを設定された長さに拡大・縮小します。

だそうです。...

以上ふまえて考えてみると野中さんのスクリプトは、
まず基準となる点、基準となる距離を決めておき、
変更点の位置が変わったら、基準点から変更点への線上の
基準距離の位置の点を出せば角度も速度(距離)も変わらない
ってな感じの事をされてるんだろうなぁって事は分かりました。

方法としてそういう事ができるって事は分かりましたが...
敷居高いっす。 とても応用できない。

ってわけで、今回は、以前森さんから頂いた名言
「動けばいい」を旗印に、できる事で遠回り策を模索中です。
完全に速度を一定ってのはできなさそうですが、
そもそもは「超スローになっちゃう」のを回避したかったっていう
意図だったので、それだけなら、なんとかできそうであります。

ありがとうございました。超長文すんません。
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops