- PR -

複数の円運動の同時描画

1
投稿者投稿内容
会議室デビュー日: 2003/05/27
投稿数: 3
お住まい・勤務地: 東京都中野区
投稿日時: 2003-05-27 10:20
はじめまして。
小生のサイトで太陽系の模型を提示したいと思っております。

http://pasosavi.infoseek.livedoor.com/ のDemo2

ただ、思うような円運動の同時描画ができません。
直前に動いたレイヤーが円運動の中心になってしまいます。
同時に同心円を描かせることもできません。

どうすればきちんと動くようになるのか、
もし心ある方がおられましたらご指導ください。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-05-27 10:48
どうも、Wataです。

まず、
> もし心ある方がおられましたらご指導ください。
は「心当たりのある方」の間違いですよね。
じゃないと、レスしない人は心無い冷たい人になってしまう・・・

リンク先のサイトを開いてみましたが、問題のものがどこにあるのか
よく分かりませんでした。
ですので、憶測で心当たりだけ。

「ひとつときは上手くいって、複数だと動かない」
こういうときは、大抵共有すべきでないものを共有してしまっている
場合が多いと思います。
インスタンスフィールドにすべき物をスタティックフィールドにしていたり、
スレッドごとにインスタンス化すべきものを、複数のスレッドからアクセスしていたり・・・

まあ、憶測ですので参考までに。
ant
ベテラン
会議室デビュー日: 2002/07/11
投稿数: 51
投稿日時: 2003-05-27 13:47
これのことでは?
http://pasosavi.infoseek.livedoor.com/Demo/demo3.htm
JAVAじゃなくてJAVA Scriptですね

で、これは難しい問題ですね。。。
なにから説明したらいいのか・・・・

この作り方ではこのような動きになりますね。
各画像の座標が保存されてないとうごかせませんよね?
とりあえず各画像単独で動くように関数を分けて作ってみてはいかがでしょうか?
スマートなやり方ではないですが・・・
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-05-27 13:49
Demo2を見てみました。これって、JavaScriptですね。
一応、JavaとJavaScriptは全く関係ない別物なので、この会議室の対象外となりそうですが、それだとちょっと「心ない」気もするので少しだけ。
HTMLの後半に、円運動させているレイヤの定義がありますが、これが入れ子になってしまってます。このせいで、子供のレイヤは親のレイヤの位置に影響を受けてしまってます。

具体的には、後ろにまとめちゃってる</DIV>を各</P>の直後でやってください。
会議室デビュー日: 2003/05/27
投稿数: 3
お住まい・勤務地: 東京都中野区
投稿日時: 2003-05-28 01:42
皆様、ご親切なレスに深く感謝いたします。
また、不埒で非礼な書き込みをしてしまいましたこと、
この場をお借りしてお詫び申し上げます。

以後、気を付けますので、
今後共どうぞ宜しくお願いいたします。

JavaとJavaScriptとJavaAppletが
ごっちゃになっているというスキルが恥ずかしいです…

へげもん氏のご指導をいただきましたお蔭で、
とりあえず同心円運動をするようにはなりました(汗
これを同時に実行させる術がいまだ見えないのですが…(滝汗

Javaも幾ばくかでも勉強させていただきたく思います。
今回は本当にありがとうございました。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-05-30 17:48
面白そうなんでちょっといじってみた。こんなんでどうかな?

<SCRIPT language="JavaScript">
<!--
isIE4 = (navigator.appVersion.charAt(0)>=4 && (navigator.appVersion).indexOf("MSIE") != -1);
ids = new Array("lay0", "lay1", "lay2", "lay3", "lay4", "lay5", "lay6", "lay7", "lay8", "lay9", "lay10");
tID = new Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); //timer idの配列
theta = new Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); //角度初期値
spd = new Array(30, 30, 30, 30, 10, 40, 40, 50, 50, 50, 50);//再描画の間隔
theta_spd = new Array(0, 5, 5, 5, 8, 4, 3, 3, 2, 2, 1);//角速度
earth_x = 400;
earth_y = 165;
function play(id,x,y,r){
if (id == 4){
x = earth_x;
y = earth_y;
}
new_x = Math.round(x + r*Math.cos(theta[id]*Math.PI/180));
new_y = Math.round(y - r*Math.sin(theta[id]*Math.PI/180));
if(isIE4){ //IE4以降では、STYLEオプションで定義
lay = document.all(ids[id]);
lay.style.left = new_x;
lay.style.top = new_y;
lay.style.visibility = "visible";
}else{ //NN4以降では、LAYER CONTROLで定義
lay = document.layers[ids[id]];
lay.left = new_x;
lay.top = new_y;
lay.visibility = "visible";
}
if (id == 3){
earth_x = new_x + 12;
earth_y = new_y + 3;
}
theta[id] += theta_spd[id];
tID[id] = setTimeout('play("'+id+'",'+x+','+y+','+r+')',spd[id])
}

//-->
</script>
---- 中略 ----
<TR>
<TD>Mercury</td>
<TD><FONT color="#00FFFF"><A href="javascript:play(1 ,310,165,50)">Go</a>,
<A href="javascript:clearTimeout(tID[1])">Stop</a> </font></td>
</tr>
<TR>
<TD>Venus</td>
<TD><FONT color="#00FFFF"><A href="javascript:play(2 ,310,165,70)">Go</a>,
<A href="javascript:clearTimeout(tID[2])">Stop</a> </font></td>
</tr>
<TR>
<TD>Earth</td>
<TD><FONT color="#00FFFF"><A href="javascript:play(3,310,165,90)">Go</a>,
<A href="javascript:clearTimeout(tID[3])">Stop</a> </font></td>
</tr>
<TR>
<TD>Moon</td>
<TD><FONT color="#00FFFF"><A href="javascript:play(4,310,165,50)">Go</a>,
<A href="javascript:clearTimeout(tID[4])">Stop</a> </font></td>
</tr>
----以下省略
会議室デビュー日: 2003/05/27
投稿数: 3
お住まい・勤務地: 東京都中野区
投稿日時: 2003-06-01 04:48
レスに感謝です

ですが…難しいですね…

貴殿のソースをヒントにDemo4を作ってみたのですが…
月があさっての方向に飛んでいってしまうのです(泣

実はこちらでも盛り上がっております↓
http://bbs8.otd.co.jp/javascript/bbs_thread

今のDemo3と4は5Mbps程度のブロードバンド環境でないと
ちょっと重過ぎまして(反省というか限界)

Javaでなくて皆さんごめんなさい!
1

スキルアップ/キャリアアップ(JOB@IT)