EasyFAQ/59

Last-modified: 2009-03-06 (金) 15:18:52

一定の距離を保って移動する方法

投稿者いの
重要度
状態
カテゴリ
HSPバージョン3.1
E3Dバージョン5033
回答

ここから下を自由に編集してください。
上の投稿情報は安易に編集するとFAQリストのリストアップに支障が出るものもあります。
よく分からない方は分かる人に聞いてみてください。

  • 移動する物体1と距離を保って移動させたい物体2があるのですが
    x,y座標での移動はうまくいくのですが、これにz座標を加える方法がわかりません。
    下のスクリプトは、サンプルのスライムを読み込んで、
    カーソルキーでスライム1を移動し、スライム2は、お互いの距離が一定以上離れると
    スライム1の方向に近づくというものですが、これにz軸での動きを加えるにはどうすればよいのでしょう?
    x,yをx,zに変えると、今度はy座標の動かし方がわかりません。よろしくお願いします。
#include "e3dhsp3.as"
#module
#deffunc waitbyfps int p1, var fps
E3DWaitbyFPS@ p1, fps
await 0
return
#global
dim keybuf, 256
title "左右キーでX移動 上下キーでY移動 シフト+上下キーでZ移動"
E3DInit 0, -1, 0, 16, 0, scid1
// カメラの初期化
E3DSetCameraPos 0,0,4000
// mediaフォルダのスライム読み込み
E3DSigLoad "media\\slime25.sig", hsid1
x = 0.0 : y = 0.0 : z = 0.0 ; スライム1の座標
x2 = 0.0 : y2 = 0.0 : x = 0.0 ; スライム2の座標
*main
E3DGetKeyboardState keybuf
if keybuf.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了
getkey shift,16						; キー入力でスライム1移動
stick in,15
if in & 1 : x+10.0
if in & 4 : x-10.0
if in & 2 : if shift : z-10.0 : else : y+10.0
if in & 8 : if shift : z+10.0 : else : y-10.0
a = x2-x : b = y2-y : c = z2-z		; スライム同士の距離
aida = sqrt(a*a + b*b + c*c)
if aida > 600.0 {	; お互いの距離が600.0以上離れたらスライム2が近づく
kakudo = atan((x2-x),(y2-y)) ; 角度
x2 = x + sin(kakudo) * 600.0
y2 = y + cos(kakudo) * 600.0
}
E3DBeginScene scid1
E3DSetPos hsid1, x,y,z : E3DChkInView scid1, hsid1 ; スライム1
E3DRender scid1, hsid1, 0,0,0,0,0
E3DSetPos hsid1, x2,y2,z2 : E3DChkInView scid1, hsid1 ; スライム2
E3DRender scid1, hsid1, 0,0,0,0,0
E3DEndScene : E3DPresent scid1
waitbyfps 60, chkfps1
goto *main
*bye
E3DBye
end
  • いの?
  • E3Dはベクトルとかワカンネ子供たちでもゲーム作れるよう便利な命令が用意してあります。折角なので利用しましょう。ヒント:E3DCloseTo、E3DVec3Length -- ナナ? 2009-03-05 (木) 19:05:00
  • ナナさん返答ありがとうございます。ベクトルは難しそうで敬遠していたのですが
    この機会にほんの少しだけ勉強してきました。その上でヒントの命令を使ってみたらうまくいきました!
    • いの?