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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0917
MZ-SOFTN88BASICのPAINT命令にあたるものはないでしょうか?5解決


MZ-SOFT

リンク

2017/9/17(Sun) 19:56:01|NO.81353

 秀和システム『はじめてのプログラミング』を読みながら、昔の『マイコンベーシックマガ
ジン』に掲載されていた『月面着陸ゲーム』を移植してみようと四苦八苦しているのですが、
line文を使って描いた多角形の中身を赤で塗りつぶすN88BASICのPAINT命令に相当するものはな
いでしょうか?
 ブログの方に今まで作った物のスクリーンショットを載せています。
 HSPは始めたばかりです。どうかよろしくお願いします。



この記事に返信する


沢渡

リンク

2017/9/17(Sun) 20:22:04|NO.81354

「塗り潰し」に関する処理はHSPで標準でサポートされていませんが、以下の「HSPサンプル蔵」にある
「ペイント処理をする」の方法はどうでしょうか?
一番目の #module から一番目の #global までをソースコードの先頭に張れば、BASICのpaint文に近い
gpaintという命令が追加されます。
http://hspnext.com/hspkura/hspkura10.htm

軽く試しただけなので、詳しいことはよくわかりませんが、
・gpaint %1,%2 で、(%1,%2)を起点として、閉塞領域を現在の色で染める。
・%1と%2に負の値を指定すると、現在のマウスカーソルの位置を起点とする。
という内容のようです。



MZ-SOFT

リンク

2017/9/17(Sun) 20:38:13|NO.81356

 ソースを眺めてみたのですが、ひ〜難しそう・・・。
しかし、頑張ってみます。ありがとうございました。



科学太郎

リンク

2017/9/17(Sun) 20:46:42|NO.81357

> line文を使って描いた多角形の中身を赤で塗りつぶすN88BASICのPAINT命令に相当するものはな
> いでしょうか?
HSPにはありませんね。

こちらも昔購入した「ベーシック・マガジン」などをHSPで移植しようとしたことがあります。
しかし、命令が似てるけど引数の意味が違ったり、なかったりします。

多分、HSPで存在しない命令の代表は「PAINT命令」でしょうね。
そこでHSPを始めたころの初期サンプルを紹介しいます。

//------------------------------------------------------------------------------ // HSP:多角形の塗りつぶし方法 //============================================================================== // @URL(http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1018377295) //------------------------------------------------------------------------------ #include "gdi32.as" #module ;p1,p2の座標からp3,p4,p5の色までcolorで設定した色で塗り潰す #deffunc PaintOut int x, int y, int r, int g, int b mref bmscr, 67 CreateSolidBrush bmscr(40) Brush = stat SelectObject hdc, brush oldBrush = stat ExtFloodFill hdc, x, y, r+(g<<8)+(b<<16), 0 SelectObject hdc, oldBrush DeleteObject brush return #global ;赤線の内側を青で塗り潰す color $FF,$00,$00 line 150, 100, 100, 200 line 100, 200, 200, 200 line 200, 200, 150, 100 color $00,$00,$FF PaintOut 150, 150, 255, 0, 0 redraw 1 stop //------------------------------------------------------------------------------ // End of ExtFloodFill.hsp //------------------------------------------------------------------------------

これは line 命令で囲まれた三角形内部を塗りつぶしてます。
基本的に塗りつぶしは API 関数の ExtFloodFill 命令で行いますが、
「redraw 1」を実行しないとウインドウに反映しません。注意。



MZ-SOFT

リンク

2017/9/21(Thu) 21:04:42|NO.81425

科学太郎さん、お礼が遅れました。どうやらうまくいきそうです。ありがとうございました。



中村実

リンク

2018/4/8(Sun) 19:46:26|NO.83942

boxfを使えばいいのでは?



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