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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0318
ペス自作マクロのバグの原因が分かりません2解決


ペス

リンク

2017/3/18(Sat) 21:35:15|NO.78582

getkeyを関数で使いたいなぁと思いまして、初めてマクロに手を付けたのですが、
原因不明のエラーが出て悩んでいます。

やりたい事は、ただgetkey命令をif文の中で使いたいだけなんです。

分かる方、助けて頂ければ嬉しいです。




color 0,0,0 : boxf color 255,255,255 pos 200,100 : mes "ゲームタイトル" pos 200,280 : mes "はじめから" pos 200,320 : mes "つづきから" if Iskey(38) : cy-- if Iskey(40) : cy++ CurPosFix 0,1 DrawCursor 180,cy+290+cy*40 stop //getkeyの関数版 #defcfunc _Iskey var _key, int _val key=_key : val=_val getkey key, val return key #define ctype Iskey(%1) key=0 : _Iskey(key, %1) //カーソルの修正 #deffunc CurPosFix var _var, int _min, int _max if _var < _min : _var = _min if _max < _var : _var = _max return //カーソルを描画 #deffunc DrawCursor int _x, int _y color 200,150,100 xary=_x+10,_x+10,_x-10,_x-10 yary=_Y,_Y,_Y+8,_Y-8 cary=$ffff07,$ffff07,$8c5202,$8c5202 gsquare gsquare_grad,xary,yary,cary return



この記事に返信する


へび

リンク

2017/3/18(Sat) 21:51:01|NO.78583

ここで出ているエラーは、マクロの宣言を上にもっていけば直ります。
ただ、そうすると
???(9) : error 4 : パラメーター式の記述が無効です (9行目)
--> if@hsp key=0 : _iskey(key, 38) : cy--
というエラーが出ると思います。

これは、マクロが純粋に文字列を置き換えるからです。

よって、#defcfuncを使うべきでしょう。



ペス

リンク

2017/3/19(Sun) 00:32:12|NO.78585

アドバイスありがとうございます。
無事に完成しました!

解決できて満足です。



比較の為に、まずgetkey命令を使った普通のスクリプトサンプルです。




//getkeyを使った普通のスクリプトサンプル title "getkeyを使った普通のスクリプトサンプル" repeat redraw 0 color 0,0,0 : boxf color 255,255,255 pos 200,100 : mes "ゲームタイトル" pos 200,280 : mes "はじめから" pos 200,320 : mes "つづきから" //キー入力 getkey key,38: if key==1: cy-- getkey key,40: if key==1: cy++ //カーソルの範囲修正 if cy<0 : cy=0 if 1<cy : cy=1 //カーソル描画 DrawCursor 180,cy+290+cy*40 redraw 1 await loop stop //カーソルを描画 #deffunc DrawCursor int _x, int _y color 200,150,100 xary=_x+10,_x+10,_x-10,_x-10 yary=_Y,_Y,_Y+8,_Y-8 cary=$ffff07,$ffff07,$8c5202,$8c5202 gsquare gsquare_grad,xary,yary,cary return



次がgetkeyを関数にした、自作関数のIskey関数というのを使用した、改良版サンプルです。





//getkeyを関数化した改良版サンプル title "getkeyを関数化した改良版サンプル" #define ctype Iskey(%1) _Iskey(key, %1) repeat redraw 0 color 0,0,0 : boxf color 255,255,255 pos 200,100 : mes "ゲームタイトル" pos 200,280 : mes "はじめから" pos 200,320 : mes "つづきから" //キー入力 if Iskey(38) : cy-- if Iskey(40) : cy++ //カーソルの範囲修正 CurPosFix cy,0,1 //カーソル描画 DrawCursor 180,cy+290+cy*40 redraw 1 await loop stop //getkeyの関数版 #defcfunc _Iskey var _key, int _val key=_key : val=_val getkey key, val return key //カーソルの修正 #deffunc CurPosFix var _var, int _min, int _max if _var < _min : _var = _min if _max < _var : _var = _max return //カーソルを描画 #deffunc DrawCursor int _x, int _y color 200,150,100 xary=_x+10,_x+10,_x-10,_x-10 yary=_Y,_Y,_Y+8,_Y-8 cary=$ffff07,$ffff07,$8c5202,$8c5202 gsquare gsquare_grad,xary,yary,cary return



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