■掲示板に戻る■ 全部 1- 101- 最新50   RSS2.0 Feed  

無人島を開拓する経営シミュつくる

1 :上の下の製作者さん:2015/05/26(火) 22:42:41.54 ID:NSmuUTZl
HSPを学びながら作ります
製作日誌的な感じでスレ建てました

2 :上の下の製作者さん:2015/05/26(火) 22:44:55.31 ID:NSmuUTZl
無人島を開拓する経営シミュレーションゲーム
島を購入した富豪設定の主人公が開拓したり資源を売ってお金儲けするという流れです

・開拓は1週間単位
・52週目に1周年を迎えて、所持金が+になっていればハッピーエンド、−でバッドエンド
・1週目は無人島開拓の調査のため何も出来ずに終わる
・1週目と52週目はコマンド不可なので、50週以内(50ターン)に無人島を発展させるのが目的

3 :上の下の製作者さん:2015/05/26(火) 22:47:32.69 ID:NSmuUTZl
基本的にメイン画面が動いて何かするというものではなく
メッセージウィンドウを作って、そこにストーリーや説明などを入れようと思います

・無人島の資源場所と資源内容
森:丸太生産できる
山:石炭生産できる、ダイヤモンドが稀に手に入る
平原:家畜生産できる
大地:農業生産できる
ここらへんのコマンド選択は何してるか解んなくなるので、カットイン?で丸太とか石炭を表示したいな

4 :上の下の製作者さん:2015/05/26(火) 22:50:42.79 ID:NSmuUTZl
雑ですが画面構成を作りました

メイン画面
http://gesei.sub.jp/kami/src/up0377.png
ショップ画面
http://gesei.sub.jp/kami/src/up0378.png

5 :上の下の製作者さん:2015/05/26(火) 22:55:54.87 ID:s9ndBUgb
がんばれ

6 :上の下の製作者さん:2015/05/26(火) 23:07:11.57 ID:NSmuUTZl
>>5
ありがとうございます

7 :上の下の製作者さん:2015/05/27(水) 00:17:33.33 ID:ar4/xXuG
*main
w_x=640 : w_y=480 ;ウィンドウサイズ
screen 0,w_x,w_y,1

mes""+week_count+"週目"

f_size=20
font "MSゴシック",f_size

week_count = 0
sdim if_3,30,5 ;commandの変数設定
if_3="大地","森","平原","山","SHOP"

if_kari=5 ;分岐の数

text_x=20 : text_y=w_y/2-(f_size*if_kari) ;テキストの表示開始位置

count=-1: j=-1
goto *main_command ;メインコマンド

8 :上の下の製作者さん:2015/05/27(水) 01:35:27.16 ID:ar4/xXuG
選択するとダイアログが表示されて
+1週し、収入が入り52週目で終了する
っていうプログラミングを参考サイトの例文使って作ってみました
http://www.dotup.org/uploda/www.dotup.org336275.exe.html

9 :上の下の製作者さん:2015/05/27(水) 02:06:25.21 ID:ar4/xXuG
よくよく考えたら
メッセージウィンドウの枠画像を用意して
その枠にぴったりあうようにposで調整すればいいだけなんじゃ・・・?
でも後々の事を考えるとメッセージ枠があって自動改行もしてくれないと・・・

10 :上の下の製作者さん:2015/05/27(水) 02:07:23.07 ID:ar4/xXuG
少し頭使いすぎてパンクしそうなので今日はこのへんで終わります

11 :上の下の製作者さん:2015/05/27(水) 11:06:33.49 ID:1xUCfOFZ
がんばってねー
期待してる

12 :上の下の製作者さん:2015/05/27(水) 16:27:40.25 ID:ar4/xXuG
>>11
ありがとうございます

13 :初心者マ>>1 ◆evoipaG78Y :2015/05/27(水) 16:29:14.82 ID:ar4/xXuG
コテハンつけました

>>11
ありがとうございます

14 :初心者マ>>1 ◆evoipaG78Y :2015/05/27(水) 16:32:03.24 ID:ar4/xXuG
本文そのままだった・・・

選択肢(行)にカーソルを持っていくと
メッセージウィンドウに文字が表示されるように修正中です

メッセージ枠を適当に作って、表示させて文章を載せることはできたんですが
上記の通りにプログラムしても反応しない・・・

15 :初心者マ>>1 ◆evoipaG78Y :2015/05/27(水) 16:35:22.64 ID:ar4/xXuG
count=0
await 5

if (mousey>(text_y))&(mousey<(f_size+text_y)) :count=0
if (mousey>(f_size+text_y))&(mousey<(f_size*2+text_y)) : count=1
if (mousey>(f_size*2+text_y))&(mousey<(f_size*3+text_y)) : count=2
if (mousey>(f_size*3+text_y))&(mousey<(f_size*4+text_y)) : count=3
if (mousey>(f_size*4+text_y))&(mousey<(f_size*5+text_y)) : count=4

if (count>=0)&(count<=4) : kari,,1 ;クリックチェック
if kari=256 : goto *if_nukeru
if j=count : goto *main_command_sub

このif (mousey>(text_y))&(mousey<(f_size+text_y)) :count=0を改変して

if (mousey>(text_y))&(mousey<(f_size+text_y)) {
pos 10,390
mes "【大地】:農業生産により収入うp"
count=0
}

16 :初心者マ>>1 ◆evoipaG78Y :2015/05/27(水) 16:38:15.27 ID:ar4/xXuG
(mousey>(text_y))&(mousey<(f_size+text_y))=マウスのカーソル座標指定


もし、マウスのカーソル座標が同じなら10.390にメッセージを "【大地】:農業生産により収入うp" を入力

・・・・・・
わからない

17 :上の下の製作者さん:2015/05/27(水) 19:24:01.21 ID:SANIcGHA
文字色が背景色と同じとか描画を止めてるとか

18 :初心者マ>>1 ◆evoipaG78Y :2015/05/27(水) 19:25:18.07 ID:ar4/xXuG
http://ux.getuploader.com/98iujhmn/download/219/test.zip

19 :初心者マ>>1 ◆evoipaG78Y :2015/05/27(水) 19:31:30.40 ID:ar4/xXuG
気づいたら4時間も悩んでた・・・

20 :上の下の製作者さん:2015/05/27(水) 23:50:49.04 ID:9uOWu7kT
本スレから飛んできた。 文字が表示されないところで悩んでいるのかい
メッセージウィンドウの内容がおかしい事が気になっているのなら、それは「白色でmesしている事」が原因だよ
*main_commanc_subの下、awaitの行にcolor 0,0,0(colorと書くだけでもいい)と入れてごらん

すると、文字が表示されるけど 前に表示した内容が上書きされて表示されなくなるだろう?
これは、「以前表示した文字を消していない」から起こってしまうんだ
だから、await 5の下、そしてcolor 0,0,0の上に「以前表示したメッセージ」を消す処理が必要になるわけだ

つまり、await 5の下に
color 255,255,255
boxf 10,390,640-10,480-20
color 0,0,0
というのを追加する事になるんだけど、今度はなんか表示してしまう文字がちらついてしまうだろ
これはHSPの仕様で、「画面の初期化と描画を何度も繰り返すと画面が点滅する(ちらつく)」というものなんだ
それを解決するのがredrawという命令で、awaitの上にredraw 1、下にredraw 0と書く事で解決するよ
(redraw 0と書くと画面に書いた内容が反映されなくなる状態になり、redraw 1とかくと反映される状態になる。
 await 5の前のタイミング、つまり全部の描画が終わったタイミングで画面を反映しているんだ)

http://i.imgur.com/t7pzfpO.png
よって、こんな風に書き込めば大分きれいに表示されるようになると思うよ
仕様の細かい説明入れてて分かりにくいとは思うけど、よかったら参考にしてね

21 :初心者マ>>1 ◆evoipaG78Y :2015/05/28(木) 00:16:00.46 ID:JzUUjEGj
>>17
>>20
ありがとうございます

お二方の指摘で無事解決できました
あと、コードが自分の書いたものより綺麗だったので勝手に使っちゃいます…
redraw命令の説明もありがとうございました!

22 :初心者マ>>1 ◆evoipaG78Y :2015/05/30(土) 12:15:19.16 ID:nSormaf5
ランダム収入に挑戦中

設計案
大地:農業生産できる 1000〜2000(1000.1500.2000)3通り
森:丸太生産できる  0〜5000 (500毎にランダム)10通り
平原:家畜生産できる 1000〜3000(100毎にランダム)20通り
山:石炭生産できる 1000円の固定収入、5%の確立で+10000

23 :初心者マ>>1 ◆evoipaG78Y :2015/05/30(土) 12:17:31.09 ID:nSormaf5
SHOPは今のところ実装できるか不明ですが

・収入を変動させるアイテムの販売
・画面に反映するオブジェクト系

このふたつを考えてます

24 :初心者マ>>1 ◆evoipaG78Y :2015/05/30(土) 12:27:42.00 ID:nSormaf5
収入を変動させるアイテム例
・品種改良した米(大地) 収入2倍
・チェーンソー(森) 3000〜5000の幅に変更
・牛小屋の増築(平原) 確立を500毎に変更
・掘削機(山) 固定収入2倍 確立変動なし
MAP上の見た目に変更はなし

オブジェクト系(効果なし)
・銅像(64*32)
・豪邸(64*64)
・大豪邸(96*96)
・ヘリポート
・ビーチ
MAPアイコンを追加するだけのシステム

25 :初心者マ>>1 ◆evoipaG78Y :2015/05/30(土) 12:29:14.58 ID:nSormaf5
ランダム変数の勉強から・・・

26 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 13:20:32.97 ID:vBoDZjbV
平原の収入ランダム例

;20通りのランダム変数値(a)を100倍して変数(b)に代入
a = rnd(20)+10
b = a*100
mes ""+b
;表示されるのは1000〜3000

27 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 13:42:36.60 ID:vBoDZjbV
森は簡単に
mes rnd(10)*500

大地は
a = rnd(3)+2
b = a*500
mes ""+b


28 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 13:55:53.51 ID:vBoDZjbV
山の収入は
;0〜99の100通り(a)を用意して、もし0〜4の間であれば+10000を代入
a = rnd(99)
if a <= 4{
mes "+10000"
}

29 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 14:01:37.33 ID:vBoDZjbV
ランダム収入はマスターしたので
次はSHOPですかね・・・

たぶんですが、流れとしては
1.アイテム所持の有無を確認するプログラムを作り、分岐させる
2.アイテムを購入することで、所持金が減る
3.アイテム自体に(変数)を持たせておいて、分岐時に代入
4.新たなランダム収入プログラムをい用いて実行する

ぐらいじゃないでしょうか・・・
一番簡単そう

30 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 14:06:28.88 ID:vBoDZjbV
今更ですが
・52週目に1周年を迎えて、所持金が+になっていればハッピーエンド、−でバッドエンド
・1週目は無人島開拓の調査のため何も出来ずに終わる
前者はまず−になる要素がないのでスルーとして・・・
後者はどうやって作ればいいのだろうか・・・

31 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 14:08:11.44 ID:vBoDZjbV
と思ったけど
タイトル画面→ゲームスタート→チュートリアル?(1週目)
→本編スタート(2週目〜)→本編終了(51週目)→エンディング(52週目)
で良さそうです

32 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 14:20:18.36 ID:vBoDZjbV
SHOP画面はどうやってつくればいいのか・・・

メイン画面と同じように
選択肢を作り、カーソルを合わせると説明が出てきて
クリックすれば購入するかどうか確認され
購入した場合、次から選択できないようにする

次から選択ができないってどうやるんだろうか・・・

33 :上の下の製作者さん:2015/06/01(月) 14:41:19.98 ID:hjLOYr+B
画面からそのアイテムを消せばいいんじゃない?

34 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 15:16:24.35 ID:vBoDZjbV
画面から消すっていうと
何か上から被せるってことですかね

boxfとか使う感じですか・・・?

35 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 15:23:34.92 ID:vBoDZjbV
ニートからフリーターにランクアップした為に
きょうはこのへんにしようと思います

ランダムは既に実装できたのでデータあげておきます
http://gesei.co/aproda/src/up0062.zip.html

36 :初心者マ>>1 ◆evoipaG78Y :2015/06/01(月) 15:27:33.69 ID:vBoDZjbV
コードでここはこうしたほうがいいとかあれば
教えてもらえると嬉しいです

たぶん次元配列使えっていわれる気がするけど
イマイチ理解できなかった・・・

37 :上の下の製作者さん:2015/06/01(月) 16:13:04.22 ID:hjLOYr+B
かなりてきとーな感じで書くけど

在庫数 = 1

*main
if 在庫フラグ !0{アイテムを買い物欄に表示させて選択させる処理,go sub *aitem}


*aitem
在庫数-1
Return

みたいな感じで在庫フラグ0じゃないなら表示、0なら非表示みたいにするとか?
こうすれば在庫のリスト作って、在庫数を3にして購入する度にを1個ずつ減らしていけば、0になったら非表示になるよねっていう理屈

38 :上の下の製作者さん:2015/06/01(月) 16:17:30.55 ID:hjLOYr+B
if文間違ってるけど気にしないで
ニュアンスが伝わればいいと思ってる

39 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 05:45:03.82 ID:012NcLmR
>>37-38
なんとなく理解できました
ありがとうございます

40 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 05:50:40.95 ID:012NcLmR
SHOPは少し複雑になりそうなので現実逃避

カットイン素材を試しに表示してみたくて1時間もかけて作りました・・・
http://gesei.sub.jp/kami/src/up0379.bmp

41 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 06:05:08.53 ID:012NcLmR
カットインのやり方がイマイチわからない
移動量を作って、ループで繰り返し移動させっぱなしで
OKを押せば元に戻るっていうやり方は考えたけれど

たぶんプログラム的によくない気がする・・・

42 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 07:00:13.87 ID:012NcLmR
カットイン素材をメイン画面の前面に出して表示するやり方がわからない・・・
他力本願で申し訳ないのですが分かる方居たらお助けください・・・
http://gesei.co/aproda/src/up0063.zip.html

43 :上の下の製作者さん:2015/06/02(火) 11:52:10.98 ID:xSDej+5P
カットインが表示されないのはredraw 1がないからだよ。 redraw 0の間は画面にいくら画像を描画しても表示されないんだ
screenをはさむ事によって表示されているのは、初期化した事によってredrawも初期化されたからだよ

つまり、
buffer 2 : picload "img\\hei_in.bmp"
gsel 0 : pos 0,(w_y-200)/2 : gcopy 2,0,0,640,200
/*ここ*/ redraw 1
await 100
redraw 0
こうすればscreenがなくても画像がちゃんと表示されるんだ(await 100の後にredraw 0を入れたほうが良いので入れてるよ)
ただ、実際にこれを実行してみると分かると思うけど 今度は表示される画像がモノクロだろう?
それは、最初(8行目)のscreenの4番目の引数(パラメータ)に「1」を設定しているからなんだ
この辺りは説明すると結構長くなるから、今は気にしないでこれを0にすると(あるいは無記入にすると)上手く行くよ

http://i.imgur.com/abNp59a.png
(ちなみにscreenの引数を変更するとカーソルが当たってる文字の色が灰色から黄色になるよ)

44 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 17:57:46.21 ID:012NcLmR
>>43
ありがとうございます

なるほど、goto前の文でredraw0のまま飛んでたからですかね
1時間掛けても原因が掴めなかったので助かりました・・・

45 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 18:08:55.65 ID:012NcLmR
アイコンを実装してみました
脇道にそれた気がするけどアイコンの作り方が分かってほっこり

忘れない為にも何をして作ったか書いておきます

1.ペイントツール(CLIP STUDIO PAINT)で64*64のbmpファイルで書き出し
2.http://favicon.qfor.info/c/ のサイトで.icoファイルに変換
3-1.Let's HSPICでResourceHackerを読み込み
3-2.Let's HSPICの機能でEXEファイルのデータを書き換え
4.exeファイルのスープカップが牛アイコンに変更完了

ResourceHacker
http://www.angusj.com/resourcehacker/

Let's HSPIC
http://lhsp.s206.xrea.com/

46 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 18:37:09.55 ID:012NcLmR
やりたい事まとめ
1.SHOP画面を作る(収入増加アイテムの実装)
2.カットイン素材を残り3種類を作る
3.MAP画面を作りメイン画面に乗せる
4.MAP背景を作って乗せる
5.SHOP画面の背景を作って乗せる
6.グラフィックアイテムを作ってメイン画面のMAPに反映できるようにする
7.タイトル画面を作る
8.エンディング画面を作り、スコア表を作る
9.BGMとか効果音をつける

可能なら実装したいこと
・簡単なシューティングゲームをミニゲームとして実装する
・簡単なアクションゲームをミニゲームとして実装する

47 :初心者マ>>1 ◆evoipaG78Y :2015/06/02(火) 18:38:15.64 ID:012NcLmR
あと演出効果もやってみたいな・・・
最終的にはSRPGを作る事を目標にがんばろうと思います

48 :上の下の製作者さん:2015/06/02(火) 23:50:27.45 ID:mB451hQz
本スレ転載

577 以下、転載禁止でVIPがお送りします 2015/06/02(火) 23:35:27.188 ID:Fjf0o/NT0
>>402
亀、Cの構文でスマンが自分なら
if( rand() % 20 == 0 )
{
mes += 10000;
}
とかって書くと思う
ちなみに%は余りを出す算術演算子
0から19の内で0が出るのは1/20で5%
5%の確率って言うのを強調したいなら( 100 / 5 )に変えるか、その部分を定数にする
まぁ厳密にはrand()の乱数の生成範囲は0から32767だから正確な5%にはならないんだけど生成範囲の指定ができるなら大丈夫だと思われ

49 :上の下の製作者さん:2015/06/03(水) 07:06:50.73 ID:vEu2IbfC
蛇足かもだけど、hspではrandではなくrndで扱い方もちょっと違っていて
if文の=は1個で、余りを出す演算子は\だから
if rnd(20)\20=0{変数 += 10000}
という感じになるかな

50 :初心者マ>>1 ◆evoipaG78Y :2015/06/03(水) 16:55:21.48 ID:INmeVIJH
>>48-49
ありがとうございます

if rnd(20)\20=0{変数 += 10000}
\20というのがちょっと分からないんですが
>%は余りを出す算術演算子
っていう所に当たるって事ですかね・・・?

if rnd(20) \20 = 0 {
money_count += 10000
dialog "ダイヤモンド発見! 10000円のボーナス収入"
}

51 :上の下の製作者さん:2015/06/03(水) 17:07:19.45 ID:DTEL4vNW
>>49
HSPの場合素直にrnd(20)でいいんじゃないかな
もしくはrnd(100)/5

52 :上の下の製作者さん:2015/06/03(水) 17:16:49.58 ID:DTEL4vNW
理屈をもっと細かく解説すると

「rand()」が0から32767の間のどれかの整数になる
で例えば
15562が出た 15526÷20=776余り6
2571が出た 2571÷20=128余り11
みたいな感じで余りを採用すればどうやっても20以上は出ないというのを利用して範囲を制限してる

C言語のrand()は引数を与えられないのでこういうふうにやるけど
HSPでは逆に引数なしができなくて引数で範囲制限するようになってる
多分内部では同じようなことしてるんだと思うけどね

あとrandomize命令使わないと毎回同じ数字が並ぶから注意

randomize
for i,0,10,1
 mes rnd(10)
next

ってだけのスクリプトのrandomizeを消して何度か実行してみるとわかると思う

53 :初心者マ>>1 ◆evoipaG78Y :2015/06/03(水) 17:39:53.65 ID:INmeVIJH
初歩的な事でごめんなさい
randomizeを極端な話コード1行目につけたとしたら
以後rndは命令が適応された状態になるんですかね?

それとも何か他の命令やらでかき消されたりすることはあるんですか?
スクリーンとかでリセットされてしまうとかあったりしますか

54 :初心者マ>>1 ◆evoipaG78Y :2015/06/03(水) 17:41:23.00 ID:INmeVIJH
if文の=は1個で、余りを出す演算子は\だから
この一文見逃してました・・・
>>50は自己解決しました

55 :上の下の製作者さん:2015/06/03(水) 18:26:02.14 ID:vEu2IbfC
randomizeは>>53の認識でおkだよ
ちゃんとは調べてないけどrandomizeがリセットされる事は特になかった気がする

56 :上の下の製作者さん:2015/06/03(水) 18:26:54.02 ID:vEu2IbfC
連レスめんご
>>51
そういやそうだったね……\20いらないね……何やってんだ俺……

57 :上の下の製作者さん:2015/06/03(水) 18:31:11.28 ID:DTEL4vNW
>>53
結論:最初に一回だけやっておけばいい

ごく極端に言うと41,67,34,0,69,24,78,58,62,64,5,45,81,27,61,91,95,42,27...みたいに並んだ数字があって
rnd命令を実行するとそこから順番に数字を取り出すみたいなイメージ

randomize使わないと最初から、
randomize使うと最初以外のどこかから使いはじめる
みたいなイメージ

さらに詳しく説明すると
上記の通りrnd命令はランダムなんだけど実はランダムじゃなくて
一見ランダムに見えるように決まった計算で数字を吐き出してるのね
でその計算の一番最初の一回にはseed値とか呼ばれる何かしらの固定数値が必要になる(二回目以降は前に生成した数値を再利用する)
randomize命令はそれを設定する命令で
何もパラメータを設定しなかった場合はWindowsの現在時刻をseed値として使う
だからrandomizeは基本的には最初に一回実行しておけば
プログラムを起動した時間によって違う乱数を吐くようにできる

そもそもなんでrandomizeしないと数値が同じになるかっていうと
初期状態だとseed値が「0」になってるから

俺の理解も怪しいから正しくは「擬似乱数」で調べてもらえればと思う


58 :初心者マ>>1 ◆evoipaG78Y :2015/06/03(水) 19:19:13.67 ID:INmeVIJH
夜勤なのでここらへんで失礼します
教えてくださった方々ありがとうございます

明日明後日は個人的な用事で作業できないと思いますが
宜しければまた教えてやってください・・・

59 :初心者マ>>1 ◆evoipaG78Y :2015/06/05(金) 07:43:00.76 ID:DL9S2n0I
SHOP画面はobjimage命令を使って画像付ボタンを並べて、
カーソルを触れると、メッセージウィンドウに説明が出る

クリックでダイアログが表示され購入の意思をはい/いいえ
はい→gosubで飛び(購入処理+ボタン画像をメイン画面に表示+購入後のボタン変更)を一括処理してSHOP画面に戻る
という感じで作ろうと思います

ボタン画像となるサイズは64*64で
256*128の画像から64サイズを抜き出して使うという形にします
http://gesei.sub.jp/kami/src/up0381.bmp←ボタン画像
http://www.dotup.org/uploda/www.dotup.org352232.ico←前回張るの忘れていたアイコン画像
ドット絵を描いてたら時間がなくなったのでプログラムは夜にでも・・・

60 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 09:27:57.39 ID:jErNRrzq
寝てしまっていた

objimage命令の扱い方が思っていたのと違いました
objimage id,x1,y1,x2,y2,x3,y3

id : カスタムボタンの参照バッファID
x1,y1 : カスタムボタンの参照座標1(通常時)
x2,y2 : カスタムボタンの参照座標2(押し下げ時)
x3,y3 : カスタムボタンの参照座標3(マウスオーバー時)

明記していないと自動で0が入るのか
マウスクリック時になぜか0.0座標から64の米アイコンを認識してしまうみたいで
これは仕様なんでしょうか・・・?

SHOP実装画面
http://gesei.sub.jp/kami/src/up0382.png

61 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 10:57:34.11 ID:jErNRrzq
仕方がないので画像を追加しました
マウスオーバー時には何も影響がないのも何でなんだろう・・・

そしてアイテムの説明をいれるやり方がわからない

62 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 11:27:13.92 ID:jErNRrzq
座標1______________座標2
  |       |
  |..............|
  |______________|
座標3       座標4

if mousex>=座標1 & mousex<=座標2 & mousey>=座標3 & mousey<=座標4{
pos 10,390 : mes "あいうえお"
}
これじゃ出来ないのかな・・・

63 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 11:27:59.40 ID:jErNRrzq
頭が追いつかない・・・

64 :上の下の製作者さん:2015/06/06(土) 12:45:53.89 ID:gHu8nWeW
http://i.imgur.com/jq2DwAb.png
ひとまずobjimageとその周辺命令の影響範囲についてざっくりとまとめてみた
もうbuttonは使っていないという事ならスルーでおk

*以下コピペ用サンプル
screen 0,640,480
celload "up0381.bmp",1

objsize 64,64

pos 100,100
objimage 1,0,0,0,0,0,0
button gosub "",*label

pos 200,100
objimage 1,64,0,64,0,64,0
button gosub "",*label

stop
*label
end

65 :上の下の製作者さん:2015/06/06(土) 12:49:04.12 ID:gHu8nWeW
追記

>>60
>明記していないと自動で0が入るのか
>マウスクリック時になぜか0.0座標から64の米アイコンを認識してしまうみたいで
>これは仕様なんでしょうか・・・?

objimage 3,64,0

こう表記した場合

objimage 3,64,0,64,0,64,0 (ノコ ノコ ノコ)
ではなく
objimage 3,64,0,0,0,0,0 (ノコ 米 米)
と解釈されているのが原因

66 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 13:57:48.01 ID:jErNRrzq
>>64-65
詳しい解説付きでありがとうございます!

>objimage 3,64,0,64,0,64,0 (ノコ ノコ ノコ)
>ではなく
>objimage 3,64,0,0,0,0,0 (ノコ 米 米)
>と解釈されているのが原因

やはりそうだったんですね
全部同じに設定すれば変動しなくて済むってことを後から気付きました・・・
結果的に選択時の画像を追加したことによってゲームっぽくなったので次から気をつけたいと思います

67 :上の下の製作者さん:2015/06/06(土) 14:28:14.73 ID:gHu8nWeW
>>62は解決したのかな
どういう結果を狙ってるのかがわからないけど
マウスカーソルの検出ができてないのか
それとも表示ができてないのかをまずはっきりさせてみたらどうだろう

68 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 14:32:16.38 ID:jErNRrzq
今更ですがSHOPアイテムを実装すると、
ほとんど設計の根元から変えるプログラミングが必要だということに気付いてしまった・・・

一つシステム作るだけでこんなに苦労していたのかと身をもって体験中
散々いろんなゲームで文句つけてた自分がちょっと恥ずかしい

69 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 14:38:07.91 ID:jErNRrzq
>>67
いまだに解決できてないです・・・
ボタン表示されたアイコンの上にカーソルを持っていくと
メッセージ枠にメッセージを入れるっていうのをやってます

70 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 14:58:50.89 ID:jErNRrzq
マウスカーソルが検出されていない・・・っぽい

71 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 15:08:28.66 ID:jErNRrzq
で、できたけど・・・
画面がチカチカするうううううう

72 :上の下の製作者さん:2015/06/06(土) 15:19:05.13 ID:gHu8nWeW
画面のチカチカは本来redrawを使えば解消できるんだけど
clsを使うとredrawの設定もクリアしてしまうのでまたチカチカしてしまう
clsの代わりに
color 255,255,255
boxf
の画面全体白塗りつぶしで対応してみたらどうだろうとエスパー(当てずっぽう)

73 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 15:41:11.88 ID:jErNRrzq
http://gesei.co/aproda/src/up0064.zip.html

gotoで戻ることを高速でやってる?っぽくて
でも止めると今度はメッセージが表示されなくなってしまう・・・

ちょっと原因が良く分かってないです

74 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 15:49:00.30 ID:jErNRrzq
画面がチカチカというか
どう考えてもあーこれなんか処理してるなっていう感じですね

screenが関係してそうな感じはするんですが
つい最近同じ指摘受けてたきがするけどド忘れしてます・・・

75 :上の下の製作者さん:2015/06/06(土) 16:05:59.87 ID:gHu8nWeW
ちょっと説明に悩んでた
そもそもちらつくというのは何かという所から考えていこう
「画面をクリアという行為が見えてしまう」というのがチラつきの原因
なのでredrawを用いてチラつきを防止(>>20)したわけだけど
screen命令は画面自体を初期化する命令だけど
全パラメータを省略した場合は0番の画面を初期化する事になる
つまい画面0番の細かい設定から何から全てぶん投げて初期状態に戻すわけで
redraw 0で書いてる途中の状態を見えないようにしていた意味もなくなる
基本的にこの命令は最初に一回だけ使って以後実行されないようにするべきもの

これだけに気をつけても多分問題は解決しないと思うけどScreenについてはそんな感じ


76 :上の下の製作者さん:2015/06/06(土) 17:12:58.82 ID:96xT/GdG
大体修正できたけど説明すると長くなるから2時間ぐらい待って

77 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 17:26:10.70 ID:jErNRrzq
>>75
なるほど・・・
となると、screenで初期化するのはタブーってことですかね
メインルーチンに必要最低限というか、ゲーム画面の描画関係だけ作って
サブルーチンでステータスとかパラメータの整理する感じじゃないとまとまらない感じですかね

メイン画面に選択肢もいれたからウィンドウIDをそのまま使おうとしてもくっついてしまうから・・・

78 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 17:27:15.18 ID:jErNRrzq
>>76
すみません・・・助かります
その間、自分でも解決できそうな所を模索しようと思います

79 :上の下の製作者さん:2015/06/06(土) 18:10:34.50 ID:96xT/GdG
バグの修正にいくらか段階を踏むから(別々の情報を一つの情報として受け取ると混乱するので)段階ごとに番号を振ってるけどキモかったらめんご
ちなみにobjimageはhsp3.51だとエラーが起こるので、この修正しても直らなかったらhspアプデしてね(差し替えてね)

@
「点滅の原因」そのものはscreenが原因だよ。 screenはclsの強化バージョンみたいなもので
clsと同じように これをループ中に挟むと画面が点滅しておかしくなるんだ
なので、まずはscreenをなくすことから始めるよ

A
でも、screenを直してもとある問題が残るよ
それは、button系命令およびcellloadなどの命令がループ上にあることだよ

画像をコピーする処理とかと違って、buttonは「1回やったら(clsやclrobjなどがなどが入らない限り)なくならない」ものなんだ
ループの中にbuttonがあったら1ループする毎にbuttonが追加されて大変な事になるわけだね

そして、cellloadなどの画像も「1回やったら(データを上書きしない限り)それでいい」タイプの命令だから
ループ中にあると1ループするたびに画像が読み込まれる処理が行われて無意味に重くなるんだ

B
じゃあどうすればいいのかというと、(これはあくまで一例で 解決方法は他の方法もあるけど)「ループ部分とループ外部分を作る」んだ

http://i.imgur.com/lc5JCrs.png
具体的にはこんな感じ(画面を初期化したい場合はredraw 0の直後か*shop_loopの最初にcolor 255,255,255 : boxf : color 0,0,0)
*if_nukeruから飛んでくるラベルは*shopラベルだけど、ループ部分は*shop_loopからgoto *shop_loopの範囲にするわけだね

C
こうすれば、@の問題である「screen」の問題が解決し
Aの問題である「buttonや画像読み込みが何度も行われる問題」も解決するよ
http://fast-uploader.com/file/6989137345732/
今回修正したスクリプトがこれだから、よく分からないって場合は実際にこれを改造したりして色々考えるといいと思うよ

80 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 18:41:48.48 ID:jErNRrzq
>>79
ありがとうございます

ループ中にbuttonがダメだったんですね・・・

一つだけ質問なんですが、この場合だとラベル間の移動が出来ないので
標準というか・・・プログラムの上から下へ読み込むみたいな奴で
移動してますけど、それ自体はアリなんでしょうか?

if_nukeru→shop→gotoなどがないので標準読み込み→shop_loop



81 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 18:48:21.01 ID:jErNRrzq
下か左からカーソルをいれないと上手いこと表示しない・・・

82 :上の下の製作者さん:2015/06/06(土) 18:51:09.84 ID:96xT/GdG
ラベル間の移動ができないってのは具体的にはどういう事かな?
shop_loopにおいて、別に*shopで読み込んだボタンはそのまま残ってるから「戻る」ボタンを押せば*mainに戻れるよ

83 :上の下の製作者さん:2015/06/06(土) 18:54:58.47 ID:gHu8nWeW
*shop_loop

;メッセージウィンドウの位置 SHOP画面での表示
pos 0,w_y-100 : gcopy 1,0,0,640,90
if mousex>=96 & mousex<=160 & mousey>=100 & mousey<=164{
pos 10,390 : mes "あいうえお"
}

if文の不等号逆じゃね?

84 :上の下の製作者さん:2015/06/06(土) 18:55:57.19 ID:gHu8nWeW
いやそんなことなかったごめん
あれ?なんでこれ反応しねーんだろう

85 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 18:57:20.67 ID:jErNRrzq
*shop内では*shop_loopへ行く為のジャンプ用の命令がないので
コードが上から下へ読み込まれる特性?みたいなものだけで移動していると思うんですけど
そこにラベルが挟んでいても問題はないのかなと

86 :上の下の製作者さん:2015/06/06(土) 19:00:21.58 ID:gHu8nWeW
>>81
わかった
HSP専門じゃないから知らなかったんだけど
buttonの上にカーソルがいる時はmousexとmouseyが更新されないみたい

87 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 19:04:03.18 ID:jErNRrzq
>>86
修正前の汚いプログラムだとボタンがあっても動いてはいたんです・・・
もしかして修正後は余計な処理が無くなった分
ぬるぬる動きすぎてマウスポインタの位置が上手く読み込めていないとか・・・?

88 :上の下の製作者さん:2015/06/06(土) 19:05:00.71 ID:96xT/GdG
不等号はそれで合ってるよ。 矩形当たり判定の式は分かってる?
矩形(長方形)当たり判定はxがa以上(超)b以下(未満)だったら動くって処理をx軸とy軸の両方に行ってるものだよ

>>81
言い忘れてたけどbutton(あとinputとかmesboxとか。 知らなかったらおk)とかのオブジェクトにマウスカーソルが乗ってるとき、
mousex,mouseyの数値が変わらなくなるんだ(HSPのそういう仕様なんだ)
マウスオーバーで説明文を表示するみたいに、mouse,mouseyの処理を使いたかったらマウス関連の処理を色々調べるか
button以外で無理やりbuttonっぽい動作をする処理を自作する必要があるよ

http://fast-uploader.com/file/6989140442975/
http://i.imgur.com/KS3G5SC.png
もし良かったら以前無理矢理作ったループ上に載せるbuttonみたいなのを使えるプラグインをあげるよ
使いこなせるようになるまでちょっと面倒くさいかもだけど

89 :上の下の製作者さん:2015/06/06(土) 19:08:09.28 ID:96xT/GdG
>>85
まだいまいちよく分からないので関係ない事を言ってるかもだけど、
ラベルはあくまでそこに移動できる「チェックポイント」ってだけでそれそのものに意味は無いよ
たとえば
*test
*test2
*test3
*test4
goto test
と書くようなことはできるし

*test
*test2
*test3
*test4
goto test3
と書くようなこともできるよ

90 :上の下の製作者さん:2015/06/06(土) 19:15:12.46 ID:96xT/GdG
連レスめんご
>>88の続きだけど、念のために書くとたぶんbuttonとマウスカーソルの処理が一緒に行えるようなことは無いと思うよ
(もちろん、俺が知らないだけで実際には動いたってこともあるかもしれないけど)

たとえば*main_command_subにおいて「マウスカーソルが乗っていると文字列を表示する」って処理があるけど、
これはマウスのクリックじゃなくstickで処理を行ってるからだよ

91 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 19:16:58.17 ID:jErNRrzq
>>88-89
仕様なんですか・・・
今はまだプラグイン系は弄れる段階にないので、ひとまず問題があることだけ把握しておいて
別の説明表示を作ろうと思います

ラベルについては深く考えすぎてました・・・

92 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 19:59:05.82 ID:jErNRrzq
アイテムを購入すると、メイン画面にアイコンを表示するっていうif文をぱぱっと作れて
ようやくゲーム作ってるって感じになれた・・・
みんなありがとう・・・

初めて自分の思い通りに一発表示された気がする

93 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 20:10:03.39 ID:jErNRrzq
追加したプログラムと、その結果です
画面にはないですが、アイテムの在庫データを一番上に持ってきてます

http://gesei.sub.jp/kami/src/up0383.png

購入したアイテムのアイコンがメイン画面に表示されるだけの小さいシステム要素

94 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 20:13:19.20 ID:jErNRrzq
まずはSHOP画面のカーソル問題から解決したいので
先ほど代替案として思いついた

1.SHOPの背景画像に『アイテムの説明』と書く
2.その文字にカーソルを持っていくとメッセージウィンドウに説明を表示

ってことで、背景作ってきます

95 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 20:14:20.48 ID:jErNRrzq
個人的に忘れないように、演算子の説明が載っているサイトをのせておきます
http://www.geocities.co.jp/Playtown-Yoyo/6130/hsp/hsp-operator.html

96 :初心者マ>>1 ◆evoipaG78Y :2015/06/06(土) 21:07:14.70 ID:jErNRrzq
古代の地図みたいなしわしわの紙作ろうとしたら失敗したので
普通に画像探してきました・・・

97 :初心者マ>>1 ◆evoipaG78Y :2015/06/07(日) 00:14:30.17 ID:tuoQRDuG
http://gesei.co/aproda/src/up0065.zip.html

ようやくゲームっぽくなりました・・・

明日はカットイン素材残りの分を作り
タイトル画面を作ってみたいと思います

98 :初心者マ>>1 ◆evoipaG78Y :2015/06/07(日) 18:48:21.39 ID:tuoQRDuG
http://gesei.sub.jp/kami/src/up0386.bmp 山
http://gesei.sub.jp/kami/src/up0385.bmp 大地
http://gesei.sub.jp/kami/src/up0384.bmp 森

カットインは全種類揃いました
タイトル画面はそもそも必要なかったので、ゲ製ロゴを表示しておわりにしようと思います
時間が余ったのでダイヤモンドだけ少し凝った事をしたいなぁ・・・

99 :初心者マ>>1 ◆evoipaG78Y :2015/06/07(日) 20:07:30.49 ID:tuoQRDuG
タイトル画面というかロゴ表示してフェードインさせることはできたんですが
ロゴ画像に透過処理してないらしく画面が綺麗に真っ白くなってくれない・・・

画像で苦戦するなんて・・・

100 :初心者マ>>1 ◆evoipaG78Y :2015/06/07(日) 20:22:21.87 ID:tuoQRDuG
そもそもロゴ画像のサイズを640*480にすればいいんじゃないかって気づく

101 :初心者マ>>1 ◆evoipaG78Y :2015/06/07(日) 20:57:25.64 ID:tuoQRDuG
;ロゴ関係
fade = 255
speed = 5
/* ◆◆◆ ゲ製ロゴ表示 ◆◆◆ */
buffer 1,w_x,w_y
celload "img\\logo.png",2
gsel 0

repeat 100 ;100*await秒、2秒
redraw 0
gmode 1
pos 0,0 : gcopy 2,0,0,640,480
gmode 4,640,480,fade
pos 0,0 : gcopy 1
fade -= speed
redraw 1
await 20
loop
/* ◆◆◆ ロゴ表示明るく ◆◆◆ */
repeat 100 ;100*await秒、2秒
redraw 0
gmode 1
pos 0, 0 : gcopy 2, 0, 0, 640, 480
gmode 4, 640, 480, fade
pos 0, 0 : gcopy 1
fade += speed
redraw 1
await 20
loop

43KB
続きを読む

名前: E-mail(省略可)
READ.CGI - 0ch+ BBS 0.7.3 20130527 &β2014221