HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0716
おにく弧を描いて指定地点に弾を飛ばす5解決


おにく

リンク

2014/7/16(Wed) 16:05:29|NO.62922

弧を描いて弾を飛ばす、というのはできるのですが
指定地点にそれを落としたい場合どのように書けば良いですか?教えてください



この記事に返信する


kanahiron

リンク

2014/7/16(Wed) 16:11:00|NO.62923

>弧を描いて弾を飛ばす、というのはできる
これをベースに位置を指定する様に書き換えるのでスクリプトを貼ってもらえないと回答がバラバラの変数名や方法になってしまいますよ



おにく

リンク

2014/7/16(Wed) 17:15:12|NO.62924

kanahiron様 ありがとうございます、

以下max回数repeatの処理を省いてある簡略ソースです、クリックで弾を飛ばします
点A(自)から点B(対象)へ向かい突きぬけて移動する処理にTg(徐々に重くなる)の動作を加えています

max = 200;表示最大数
dim Ttime,max;弾が残る時間
dim Tsize,max;弾のサイズ
ddim Tx,max;弾の位置
ddim Ty,max
ddim TVx,max;弾のベクトル
ddim TVy,max
ddim Tg,max;重量持ちの弾
screen 0,1200,600,0,5,20

MF = 6.00
repeat
color 255,255,255:boxf
getkey kref,1
getkey krai,2
getkey supe,32


color 200,200,100//プレイヤー
boxf 595+px,295+py,605+px,305+py

if kref & key = 0:{
Tx=0.0:TVx=0.0:Ty=0.0:TVy=0.0:Tg=0.0
kyorix = double(mousex - 600)
kyoriy = double(mousey - 300)
lt = sqrt(kyorix*kyorix+kyoriy*kyoriy)
TVx = double(kyorix)/lt*MF
TVy = double(kyoriy)/lt*MF
Ttime = 200
key= 1
}

if Ttime ! 0:{
Tx+TVx:Ty+TVy
Ttime--
Ty + Tg
Tg + 0.1
circle 595+Tx,295+Ty,605+Tx,305+Ty
}

if kref=0 & krai=0:key = 0
redraw 1
redraw 0
await 10
loop

お願いします



たんす

リンク

2014/7/16(Wed) 20:39:32|NO.62925

作ってみました。

if kref & key = 0:{ //左クリックで[狙う軌跡] ;省略 } if krai & key = 0:{ //右クリックで[通る軌跡] Tx=0.0:TVx=0.0:Ty=0.0:TVy=0.0:Tg=0.0 kyorix = double(mousex - 600) kyoriy = double(mousey - 300) lt = sqrt(kyorix*kyorix+kyoriy*kyoriy) TVx = double(kyorix)/lt*MF TVy = double(kyoriy)/lt*MF-((kyorix/TVx)*0.1/2) ;縦向きの初速を補正。0.1はTgの変化量 Ttime = 200 key= 1 }



掘木

リンク

2014/7/16(Wed) 20:54:27|NO.62926

いくつか考えられるアプローチがありますが・・・。
まともに行くとなると何かうまいルーチンがないと、とても辛そうに思えます。

前提:重力加速する、空気抵抗等を無視できる物体に初速度を与え、目標地点を通過させたい?
基本データ:初期地点、目標地点、重力加速度、(初期の速さ?)

明確にしてほしい点が1つあります。
(I).打ち出す球の速さを一定にして、それを実現したい。
(II).打ち出す球の、速さの上下をある程度許容して、それを実現したい。

(I)のほうが圧倒的に難しいです。
また、(I)は実現不能な場合があります。(どの向きで打ち出しても届かない場合がある)

(II)のほうは確実に実現できますが、許容幅に制限を加えると少々手が込みます。

もっとも単純に(II)の実装を作ると(許容幅無制限)、 1.放物運動して何順後に到達するかを決める(距離/仮速さ=所要時間) 2.打ち出してからT順後の座標は( x + dx*T , y + dy*T + T*(T-1)*g/2 )である。 (dx,dyは変数。積じゃない) これを目標地点と一致させるようにdxとdyについての方程式を解く。 数列の和の計算ができれば何も難しくはない。義務教育外ですが。
(I)の場合の届くかどうかって、どーするんだろう。。。


追記:点A、点Bが、コード上の何か、という説明がありませんよ。
点A(600,300),点B(mousex,mousey)かな?

書いてる間にたんすさんのレスが。まぁ(II)の実装が普通なのかねえ。



おにく

リンク

2014/7/17(Thu) 06:13:29|NO.62931

たんす様 ありがとうございます!使わせていただきます

掘木様 点AB失礼しました
点A(600,300),点B(mousex,mousey)の通りです
(II)の仕様で想定しております、ありがとうございます

皆様感謝します、また行き詰ったらお願いします



ONION software Copyright 1997-2023(c) All rights reserved.