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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0417
白いコーヒー牛乳FFみたいな、ダメージをキャラの上に出す方法11解決


白いコーヒー牛乳

リンク

2009/4/17(Fri) 22:08:47|NO.24654

題名のとうりです...
一瞬は出るのですが(pos+mes命令で)ほんと一瞬なのでダイアログにしました
あと無駄が多いと思います。
教えてくれたらうれしぃです<(_ _)>
+キャラが出ないので出す方法も教えてください..


zihp=20 MP=10 AT=3 DF=2 MAT=2 S=2 EXP=0 tekiHP=100 tekiAT=2 tekiDF=2 tekiMAT=1 tekiS=2 keikennti=5 repeat *miss w=0 DF=0 font "MS ゴシック",30 stick KY if KY=2:menu-1 if KY=8:menu+1 if menu=-1:menu+1 if menu=5:menu-1 redraw 0 color 255,255,255:boxf color 0,0,0 pos 10,410:font "MS ゴシック",18 :mes "主人公" pos 100,410:font "MS ゴシック",18 :mes "HP "+zihp+"" pos 100,430:font "MS ゴシック",18:mes "MP "+MP+"" color 0,0,0 if menu=0:pos 540,402:font "MS ゴシック",18 :mes "→":if KY=16:randomize:damege=AT+rnd(4)-tekiDF:dialog "攻撃した!"+damege+"のダメージ!":tekihp-damege:tarn=1:if tekihp<=0:kane+20+rnd(30):dialog "敵を倒した":EXP=EXP+keikennti:dialog ""+keikennti+"EXP獲得!":tarn=0:w+1:if w=1 if menu=1:pos 540,418:font "MS ゴシック",18 :mes "→":if KY=16 if menu=2:pos 540,432:font "MS ゴシック",18 :mes "→":if KY=16:DF+20:tarn=1 if menu=3:pos 540,448:font "MS ゴシック",18 :mes "→":if KY=16:mes"a" if menu=4:pos 540,463:font "MS ゴシック",18 :mes "→":if KY=16:randomize:tousou=rnd(10):if tousou=0:dialog "逃げられなかった":tarn=1:else:dialog "逃げた":tarn=0:w=1 color 0,0,0 pos 560,404:font "MS ゴシック",12 :mes "攻撃":font "MS ゴシック",12 :pos 560,420:mes "技・魔法":font "MS ゴシック",12 :pos 560,435:mes "防御":font "MS ゴシック",12 :pos 560,450:mes "アイテム":font "MS ゴシック",12 :pos 560,464:mes "逃げる" if tarn=1{dialog "敵の攻撃!":randomize:Tdamege=tekiAT+rnd(3)-(DF/2) if Tdamege>0: zihp-Tdamege :dialog ""+Tdamege+"ダメージ受けた" if damege<0:tekihp-1:dialog"まったくダメージが与えられない!" if Tdamege<0:hp-1:dialog"ぜんぜんダメージを受けない!^o^/" if zihp<=0:dialog "..負けました..":end tarn=0 } redraw 1 await 10 loop

それと「逃げる」を押しても逃げないのは気にしないでください..
それとこの掲示板ちょっと調子悪くない?



この記事に返信する


check

リンク

2009/4/17(Fri) 22:20:20|NO.24655

HSPをする前に日本語の勉強をすることをお勧めします。



tumo0b

リンク

2009/4/17(Fri) 23:05:21|NO.24657

まずはキャラを用意しましょう。
キャラがきちんと描画できたらダメージに移りましょう



tumo0b

リンク

2009/4/17(Fri) 23:06:21|NO.24658

あと、ちゃんと操作方法も書いたほうがいいと思います



ORZ

リンク

2009/4/17(Fri) 23:19:21|NO.24659

キャラクターをgcopyなりなんなりで描写した後
ダメージをdialog命令を用いて表示すればあら不思議。

キャラクターの「上」にダメージを出す事ができます。



GENKI

リンク

2009/4/18(Sat) 04:43:43|NO.24661

スクリプトがとてもみにくいので追いかける気がわきません。orz
・if文は無理に1行に収めずに、長くなるときは複数行に分けた方が見やすくなります。
・適度にインデントを使いましょう。「{〜}」の間や「repeat〜loop」間など。
・問題に関係ない部分は削除しましょう。
 font命令は不要。ループ先頭以外の「color 0,0,0」も不要。選択肢を減らせばもっと短く出来る。パラメータ計算も不要。



> 題名のとうりです...

なら題名を本文にコピペしておいて…と個人的には思ってしまいます。(まあ、大した意味はないのですが…。)

今dialog命令で表示しているようなものをmes命令などでやりたいということでしょうか?(DQみたい?)
ちなみにこんな感じの、メッセージウィンドウを描画できればいいのですか?http://gutarin.img.jugem.jp/20060725_199957.jpg

さて、今のやり方では、コマンド実行直後のみ描画しようとしているので、コマンド実行時の1ループ(一瞬)でしか表示されません。
コマンド実行有無に関係なく動作するようなメッセージ内容を表示する部分を別に用意しておく必要があります。メッセージ内容を保持する変数も必要ですね。
mesbox命令とobjprmで作るのも一つの手ではありますが、ゲーム向きではないですね。


> それとこの掲示板ちょっと調子悪くない?

どのあたりが、どのように、ですか?
私は調子が悪いと感じていないので理解することが出来ませんでした。


> +キャラが出ないので出す方法も教えてください..

mes "+キャラ"

冗談です。 HSPスクリプトエディタのメニューからツール→サンプルスクリプト参照。 サンプルビューワが起動します。カテゴリからgameを選択するとゲーム関連のサンプルが表示されるので、そちらも参考にしてください。



ヒカリ

リンク

2009/4/18(Sat) 11:27:47|NO.24665

とりあえず、FFっぽいダメージ表示のしかたをひとつ。
基本的な考え方は、シューティングゲームの「弾」と同じです。

title "←→で移動 スペースキーでダメージ表示" x=320 : y=240 repeat stick key, 15 if key & 1 : x -= 8 if key & 4 : x += 8 if key & 16 { d = rnd(100); ダメージ値 dd = 16 ; 表示フレーム数 dx = x ; 表示X座標 dy = y-16 ; 表示Y座標 } redraw 0 color 255, 255 ,200 boxf color 0, 0, 0 pos x, y : mes "者" if dd > 0 { pos dx, dy : mes d dd -- } redraw await 32 loop

あと、思ったことを少々。
randomize は、基本的にスクリプトの先頭で1回だけ呼び出せばOKです。
rnd を使うたびに呼びだす必要はありません。
同じく、font も mes の直前で呼び出す必要はありません。
サンプルに font color mes を使ったものがあります。見てみましたか?



白いコーヒー牛乳

リンク

2009/4/18(Sat) 11:34:37|NO.24666

ありがとうございますー
もっと勉強が必要ですね
がんばります...



774

リンク

2009/4/19(Sun) 06:43:52|NO.24694

参考程度にどうぞ


//ラベル名 _resは1回実行 _lpはループして実行 /* どんどん↓に読んでいってください letsbattlestart_res 戦う前の準備。ここで、wを0にしておく 【戦闘中の処理 一覧】 ※ myturn_res ここで、もしwが0以外になっていたらbattleendjudge_resに飛ばす (戦闘終了の合図が出たので、勝ったか負けたか逃げたかを判断する) wが0のままなら、そのまま↓に myturn_lp(menu決めてKY=16にするまでここでrepeatを続ける) KY=16になった時に、menuの値に応じて myturnattack_res myturndefense_res myturnescapejudge_res ↓ ↓ ↓ ↓←←←←←←←←←←←←←←←←←←← ↓ ここで、敵がやられたらw=1 逃げ切れたらw=-1にしておく enemyturn_res ここで、もしwが0以外になっていたらbattleendjudge_resに飛ばす (戦闘終了の合図が出たので、勝ったか負けたか逃げたかを判断する) wが0のままなら、そのまま↓に 次、敵の行動に応じて enemyturn_attack_res ここで、自分ががやられたらw=-2にする 今の所敵は逃げませんね myturn_res (上辺り(7行目?)にあった所へ戻り、また同じことを繰り返します。) 【戦闘終了後の処理 一覧】 battleendjudge_res wの値に応じて battleend_win_res battleend_escape_res battleend_lose_res ↓ ↓ ↓ ↓←←←←←←←←←←←←←←←←←←←←←←←←← ↓ おしまい */ *letsbattlestart_res //準備 randomize zihp=20 MP=10 AT=3 DF=2 MAT=2 S=2 EXP=0 tekiHP=100 tekiAT=2 tekiDF=2 tekiMAT=1 tekiS=2 keikennti=5 max_zihp=zihp:max_mp=mp//最大値設定 w=0//戦闘終了フラグを切る zi_damegetime=0:zi_damegepoint=0//自分のダメージtime/point *myturn_res //自分のターンになる前に wが0でないならbattle_end if w!=0:goto*battleendjudge_res //大丈夫なら以下、自分の番(stickによる操作含む)開始 *myturn_lp DF=0 stick KY if KY=2:menu-1 if KY=8:menu+1 menu=LIMIT(menu,0,5)//menu変数の値を0〜5までに抑える if 0<zi_damegetime:zi_damegetime-//もしダメージtimeが0より多いなら1ずつ減らす //16押した時〜 if KY=16 & menu=0:goto*myturn_attack_res if KY=16 & menu=2:goto*myturn_defense_res if KY=16 & menu=4:goto*myturn_escapejudge_res redraw 0 color 255,255,255:boxf //主人公 名前・HP・MP color 0,0,0:font "MS ゴシック",18,0 pos 10,410:mes "主人公" pos 100,410:mes "HP "+zihp+"" pos 100,430:mes "MP "+MP+"" //メニュー矢印 color 0,0,0:font "MS ゴシック",18 pos 540,402+menu*15:mes "→"//menuの値に合わせてposのY変化 //メニュー名 color 0,0,0:font "MS ゴシック",12 pos 560,404:mes "攻撃" pos 560,420:mes "技・魔法" pos 560,435:mes "防御" pos 560,450:mes "アイテム" pos 560,464:mes "逃げる" color 0,0,0:font "MS ゴシック",36 //自分のダメtimeに応じてposのY変化 time1以上ならpoint表示 pos 150,390-zi_damegetime/3:if 0<zi_damegetime:mes zi_damegepoint redraw 1:await 10:goto*myturn_lp *myturn_attack_res damege=AT+rnd(4)-tekiDF if damege>0:dialog "攻撃した!"+damege+"のダメージ!":tekihp-damege if damege<0:tekihp-1:dialog"まったくダメージが与えられない!" if tekihp<=0:w=1//1は勝利\ goto*enemyturn_res *myturn_defense_res DF+20 goto*enemyturn_res *myturn_escapejudge_res tousou=rnd(10) if tousou=0:dialog "逃げられなかった" dialog "逃げた":w=-1//-1は逃走 goto*enemyturn_res *enemyturn_res //相手のターンにさせる前に wが0でないならbattle_end if w!=0:goto*battleendjudge_res //大丈夫なら以下、相手の行動 goto*enemyturn_attack_res *enemyturn_attack_res //相手の番開始 dialog "敵の攻撃!":Tdamege=tekiAT+rnd(3)-(DF/2) if Tdamege>0: zihp-Tdamege :dialog ""+Tdamege+"ダメージ受けた" if Tdamege<0:hp-1:dialog"ぜんぜんダメージを受けない!^o^/":Tdamege=0//hp-1とあるがzihpではないのでダメージ0とする zi_damegetime=30:zi_damegepoint=Tdamege//ダメージtimeを30に設定 pointは食らったダメージ分 if zihp<=0:w=-2//-2は敗北 goto*myturn_res *battleendjudge_res if w=1:goto*battleend_win_res if w=-1:goto*battleend_escape_res if w=-2:goto*battleend_lose_res stop *battleend_win_res kane+20+rnd(30):dialog "敵を倒した" EXP=EXP+keikennti:dialog ""+keikennti+"EXP獲得!" redraw 0 color 255,255,255:boxf color 0,0,0:font "MS ゴシック",18 pos 15,15:mes"戦闘終了・勝利" redraw 1 stop *battleend_escape_res redraw 0 color 255,255,255:boxf color 0,0,0:font "MS ゴシック",18 pos 15,15:mes"戦闘終了・逃走" redraw 1 stop *battleend_lose_res dialog "負けました・・・" redraw 0 color 255,255,255:boxf color 0,0,0:font "MS ゴシック",18 pos 15,15:mes"戦闘終了・敗北" redraw 1 stop



774

リンク

2009/4/19(Sun) 06:52:57|NO.24695

無限ループの硬直が怖いなら、全ての
goto命令 loop命令 の直前に「await 1」を徹底してください
※ただしこの処理をしているプログラムは、動作速度が非常に遅くなります

P.S.
*myturn_escapejudge_resの部分、間違えました。
もしかしたら他に、ミスしてる箇所があるかもしれないので先に謝っておきます
すみません



どむどむ

リンク

2009/6/16(Tue) 11:29:12|NO.25791

ドラクエみたいなもの作りたいのですがどうしたらいいですか?



SYAM

リンク

2009/6/16(Tue) 12:32:40|NO.25792

>NO.25791 どむどむ さん


まずは、別にスレッド作ったほうがいいです。

その前に、やりたいことに対して自分はどこまで出来ているか、
何がわかれば出来るようになりそうか、
ちゃんと整理して 「何を聞きたいのか」 が回答者にもつたわるようにしましょう。

でなければ回答がもらえず 結局は自分が損しますよ。



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