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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0516
600-Kメモリノートパッドが書き換えれていない・・・?8解決


600-K

リンク

2012/5/16(Wed) 15:39:01|NO.46664

あまりプログラムの知識を持っていない自分なので、
どうも自分のプログラムのバグの原因が分かりません。
以下に一部スクリプトをコピーするので、間違っている箇所と説明をお願いします。

;インクルード #include "llmod3/llmod3.hsp" #include "llmod3/input.hsp" #include "a2d.hsp" ;getkey改造 ;押瞬間が2、長押しが1、放瞬間が-1、放したままが0 #module #undef getkey #deffunc getkey var p1,int p2 getkey@hsp key(122),p2 p1=key(122)*2-key(p2) key(p2)=key(122) return #global ;画像読み込み buffer 1 alResetCopyMode alCreateImageByFile 1,"button.png" alCopyImageToScreen 1,1 redraw gsel ;データファイル読み込み notesel SetingFile noteload "seting.dat" noteget Desigh,1 noteget SetOne,3 noteget SetTwo,5 ;変数初期化 a=0 gx=0:gy=18;元の位置 ;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ *mloop redraw 1 wait 1/10 redraw 0 ;画面初期化 color:boxf ;各変数の更新 mx=mousex : my=mousey getkey mc,1 getkey esc,27 ;サイドボタンの表示 pos 400,1 gmode 2 gcopy 1,208,3,20,19 if 399<mx & 421>mx and 2<=my & 22>my { gcopy 1,208,26,20,19 if mc=-1 : end } ;設定 描写 sysfont color 136,255,4:pos 0,82:mes "SETING" font "MS ゴシック",14 pos gx,gy+82:gmode 2 if setone="off":gcopy 1,164,3,20,19 if setone="on" :gcopy 1,186,3,20,19 color 20,105,46:pos gx+22,gy+86 mes "MCMを最前面表示" if gx<=mx & gx+20>=mx and gy+82<=my & gy+101>=my { pos gx,gy+82:gmode 2 if setone="off":gcopy 1,164,26,20,19 if setone="on" :gcopy 1,186,26,20,19 color 136,255,4:pos gx+22,gy+86 mes "MCMを最前面表示" if mc=2 { switch setone case 'on' notesel setingfile //noteload "seting.dat" noteadd "off",3,1 notesave "seting.dat" noteget SetOne,3 swbreak case 'off' notesel setingfile //noteload "seting.dat" noteadd "on",3,1 notesave "seting.dat" noteget SetOne,3 swbreak swend }} ;各キー操作 if a=0:goto*mloop stop
どこが不必要かどうか分からないので長くなってしまいましたが、
たぶんこのあたりでバグがあるだろうと思っています。

よろしくおねがいします。



この記事に返信する


600-K

リンク

2012/5/16(Wed) 15:52:24|NO.46665

必要なファイルの用意ができました。
http://www.geocities.jp/kamui_stst/test.lzh



600-K

リンク

2012/5/16(Wed) 16:20:21|NO.46666

連続投稿すみません。
URLはリンクで移動せず、直接アドレスバーに書き込むと接続できます。

スクリプトですが、強制的にsetoneにonやoffを代入させた結果・・・
画像の描写スクリプトに問題はないようでした。
if mc=2{
cls 4:stop;ここが追記
swich 〜
}
と書き換えて実行した結果・・・cls 4:stopは動作しました。
残る原因は

switch setone case 'on' notesel setingfile //noteload "seting.dat" noteadd "off",3,1 notesave "seting.dat" noteget SetOne,3 swbreak case 'off' notesel setingfile //noteload "seting.dat" noteadd "on",3,1 notesave "seting.dat" noteget SetOne,3 swbreak swend
だということになりますが、これの間違いが分かりません。



TMKL

リンク

2012/5/16(Wed) 18:46:24|NO.46671

必要なファイルとかDLしてないのでよくわかりませんが、
気になったところを指摘しておきます

HSP公式マニュアルより
>そんな時に使うと便利なのが「'(半角シングルクォーテーション)」 による表記です。
>これは、「'A'」のように1文字を「'」で囲んで使用します。

'→"
では?



check

リンク

2012/5/17(Thu) 09:42:12|NO.46672

スクリプト丸投げの君にはまずはデバッグの方法から説明しないといけないようだな……
と、思ったら2レス目できっちり範囲が特定できているじゃないか。
まずはとにかく動かないところを見つけろ。範囲を絞れ。

問題はswitch 〜 swendのcase文の判定式が'on'や'off'などの値になっていることではないか?
setoneの中身が文字列なら、比較対象も"on"や"off"のように文字列にしてやらなければいけない。



600-K

リンク

2012/5/17(Thu) 18:31:11|NO.46675

できました!
マッピングの際にスイッチ命令を使ったことがあって、
そこで何か勘違いしてたようです。
"が文字列を扱うときに使うというのは分かりますが、
'の使い道がいまいちよく分からないのですが・・・

とりあえず問題は解決しました。
TMKLさん、checkさん
ありがとうございました。



spider

リンク

2012/5/17(Thu) 21:04:54|NO.46676

忙しいので手短に言わせてもらいますが、
超簡単に言うと、
ダブルクォーテーション("")は文字列で
シングルクォーテーション('')は半角文字一文字(HSPではint型)です。

HSPでは、"0"は"0"以外何者でもないが、
'0'は48に等しい。(っというか'0' = 48)

ようは、シングルクォーテーションで囲うと、
半角の文字コードを意味するわけです。

うーん、説明が下手ですみません。
あれ、手短言ったわりにあんまり短くないぞ。(汗)



600-K

リンク

2012/5/19(Sat) 18:38:14|NO.46707

シングルが1byte
ダブルクが1byte以上ということですか。



spider

リンク

2012/5/19(Sat) 19:35:28|NO.46709

基本的にそういうことですけれども、
HSPではC言語でのcharと同じような型はなく、
charの配列 = str見たいな感じになっております。

よって、シングルクォーテーションで囲ったものはstr型に代入できなく、
int型にしか代入できないということです。

上のことがわからなければ下に書く内容だけ見てください。

.轡鵐哀襯ォーテーションで囲えるのは1Byteだけ(2Byte以上囲っても
 1Byte目が読まれるだけ。)
▲轡鵐哀襯ォーテーションで囲ったものはint型(整数型)である。
ダブルクォーテーションで囲ったものはstr型(文字列型)である。
peek関数で戻される値とシングルクォーテーションで囲ったものの値は
 それぞれ文字が同じなら等しい。
ゥ轡鵐哀襯ォーテーションで囲ったものはgetkeyの第二引数に使いやすい。
Ε轡鵐哀襯ォーテーションはpeek関数で戻った値をswitch文を使って、
 判定するときに便利である。(理由はい任)

コレでもわからないなら、使わないのが無難でしょう。
別に使わなかったらできないことがあるわけじゃないので。



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