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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1203
はるvramの位置関係とその他の質問3未解決


はる

リンク

2017/12/3(Sun) 03:00:06|NO.81950

vramので取得とpeek,pokeは問題なく
bgrと上下逆さまなのは調べて知識としてはわかったのですが
位置関係がよくわかりません
マップだと
普段xウィンドウサイズ*yでyの段を求めxでキャラの位置とか求めてたのですが
-+一緒じゃないので別々に考えるしかないでしょうか
これ以上砕けないとは思うのですが普段と違うのでもっといい式ないかなと気になりました
p=((ginfo_winy-1-y)*ginfo_winx+x)*3

もう一つの質問です
画面全体を透過色で塗りつぶしていましたが描いた直後に位置を取っておいてそれはよかったんですが
if s=2としている時だとマウスを動かしながらクリックした場合に端っこが残る場合があります

#uselib "user32.dll"
#func GetWindowLong "GetWindowLongA" int,int
#func SetWindowLong "SetWindowLongA" int,int,int
#func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,sptr,int,int
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002

dispx_size=ginfo_dispx
dispy_size=ginfo_dispy
bgscr 0,dispx_size,dispy_size,,0,0
hwnd0 = hwnd
color 127,127,127
uindou_wan_x_ichi=100
uindou_wan_y_ichi=100
uindou_wan_x_size=100
uindou_wan_y_size=50


GetWindowLong hwnd0,-20
SetWindowLong hwnd0,-20,stat|$80000
SetLayeredWindowAttributes hwnd0,0x00FFFFFF,255,LWA_ALPHA|LWA_COLORKEY

*main
redraw 0
mausu_x=ginfo_mx
mausu_y=ginfo_my
stick k,256


color 255,255,255
boxf a,b,c,d;このままでも使えるのですがif s=2 でやると移動しながらクリックした時にちょっとだけ残ってしまうときがあるのでどう改善したらいいか

;boxf 0,0,ginfo_dispx,ginfo_dispy ;描いたウィンドウを透過色に消すためなので先に描く


color 127,127,127
boxf uindou_wan_x_ichi-sagaku_x,uindou_wan_y_ichi-sagaku_y,uindou_wan_x_ichi+uindou_wan_x_size-sagaku_x,uindou_wan_y_ichi+uindou_wan_y_size-sagaku_y
;-----描いた場所の位置を取得
a=uindou_wan_x_ichi-sagaku_x
b=uindou_wan_y_ichi-sagaku_y
c=uindou_wan_x_ichi+uindou_wan_x_size-sagaku_x
d=uindou_wan_y_ichi+uindou_wan_y_size-sagaku_y
;----------------------------------------------------------
color 200,200,200 : boxf 200,200,400,300
pos 200,200 : font "MS ゴシック",font_size,16 : color 0,0,0 : mes "sagaku_x"+sagaku_x+""
pos 200,220 : font "MS ゴシック",font_size,16 : color 0,0,0 : mes "sagaku_y"+sagaku_y+""
pos 200,240 : font "MS ゴシック",font_size,16 : color 0,0,0 : mes "uindou_wan_x_ichi"+uindou_wan_x_ichi+""

if ((uindou_wan_x_ichi<mausu_x&uindou_wan_x_ichi+uindou_wan_x_size>mausu_x)&(uindou_wan_y_ichi<mausu_y&uindou_wan_y_ichi+uindou_wan_y_size>mausu_y)) :if k&256 : {

if s=0 : s=1

}
if s=1 : genzai_mausu_x=mausu_x : genzai_mausu_y=mausu_y : s=2
if s=2 : {

sagaku_x=genzai_mausu_x-mausu_x
sagaku_y=genzai_mausu_y-mausu_y

}
if k!256 : {

uindou_wan_x_ichi=uindou_wan_x_ichi-sagaku_x
uindou_wan_y_ichi=uindou_wan_y_ichi-sagaku_y
: sagaku_x=0 : sagaku_y=0 : s=0

}

wait 1
redraw 1
goto *main



この記事に返信する


沢渡

リンク

2017/12/3(Sun) 09:29:38|NO.81952

とりあえずVRAMについてだけ。
式についてはこの資料↓の下の方に書いてあります。以下抜粋
http://www.onionsoft.net/hsp/hspdll.html

>(フルカラーモード(1670万色)時)
>x = X座標;
>y = Y座標;
>width = ((sx*3)+3)&~3;
>vram_adr = pBit + ( ( sy - 1 - y ) * width ) + ( x * 3 );
sxとsyはウィンドウのサイズ、「~3」というのは3のnotのことなので、0xFFFFFFFCと置き換えてください。
(pBitというのは今回の話では関係ないので、無視してください)
各色の輝度の収納順序は「B、G、R」という順番なので、
B要素はvram_adrの位置に、
G要素はvram_adr+1の位置に、
R要素はvram_adr+2の位置にあります。



沢渡

リンク

2017/12/3(Sun) 13:05:12|NO.81953

2番目の質問ですが、boxf 200,200,400,300で矩形を描いて文字を塗りつぶしている筈が、
矩形が小さすぎて文字を消し切れていないだけでは?
boxf 200,200,500,300などとして、矩形のサイズを大きくすれば対処できると思いますが。



はる

リンク

2017/12/4(Mon) 00:51:07|NO.81959

何度もありがとうございます!

資料ありがとうございます、また読んで自分の中に落とし込んでみます
2番目の質問のはサイズは変えてないはずだし自分でもサイズ大きくすればいいかなとは思ったのですが
計算をふわっとばかりやってると躓きそうだなと思ってたので計算が間違えてたりとかじゃないのなら良かったです
移動しながらとか誤作動しそうなやりかただし
命令とか詳しいの知らないと対処できないやつなのかもわからないのでまた別の問題として考えます
ありがとうございました



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