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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0906
ヒヨ綺麗な斜め文章を出したいです。6解決


ヒヨ

リンク

2013/9/6(Fri) 02:04:36|NO.56913

入力された文章を綺麗に斜めに表示しようとしているのですが、上手くいきません
過去に似たような質問が有るのですが、フォントを直接傾けているっぽいので
一文字ずつ斜めになってしまう上に、一定以上傾けると文字が欠けてしまいます。

色々試した結果、gsquare命令でコピーすれば良い事は解りました。
この命令だと反転表示もできて嬉しいんですが、
あと一歩目的の結果と違いまして、文章が平行四辺形になってしまいます。

一応組んだスクリプトは・・・

#include "hspdef.as" gsel 0,-1 a=22 screen 60,300,300,0,200,200:font "MS Pゴシック",a,0:title "元" screen 61,300,300,0,510,200:font "MS Pゴシック",a,1:title "先" gsel 60:pos 120,120:mes "サンプル" b=ginfo_mesx c=ginfo_mesy line (120+b),120,120,120 line 120+b,120+a,120,120+a color 255,0,0 mx=100,200,200,100 my=150,50,150,250 sx=200,100,100,200 sy=100,100,200,200 gsel 61 gsquare 60,mx,my,sx,sy stop

そうじゃなくて、形状は長方形を保ったままで斜め表示したいのです、
で、三角関数で計算すれば何とかなると思うんですが、バカなので解りません。
色々考えたら、結構な知識が必要な気がしてきて、軽く絶望しています
どなたかお助け下さい。



この記事に返信する


fortunehill

リンク

2013/9/6(Fri) 02:29:57|NO.56916

/*ご参考(こう言う事?)*/

#uselib "kernel32.dll" #func global lstrlenW "lstrlenW" wptr ss ="サンプル" cnvstow ss,ss :lstrlenW varptr(ss) :ii = stat sdim nn,,ii:repeat ii :wpoke nn(cnt),0,wpeek(ss,cnt*2) :loop xx = 200 yy = 100 aa = deg2rad(45) bb = 32 font msmincho,bb foreach nn pos cos(aa)*bb*cnt+xx,sin(aa)*bb*cnt+yy mes cnvwtos(nn(cnt)) loop



あり

リンク

2013/9/6(Fri) 03:45:55|NO.56920

Artlet2Dを利用した例

#include "a2d.hsp" screen 0,300,300,0,200,200 alCreateImage 0, 640, 480 alSelectImage 0 alFont "MS Pゴシック", 22, 0 alTransModeRotateAt 45, 150, 150 alDrawText "サンプル", 0, 0, 300 ,300, 1, 1 alCopyImageToScreen 0, 0 redraw 1



あり

リンク

2013/9/6(Fri) 13:44:31|NO.56928

ちなみに、gsquareでの回転コピーは
精度が高くないので綺麗にコピーできません。

以下は参考用のgsquareでの回転コピーサンプルです。
(モジュールは過去に実験で作った物なので適当です)

起動させると回転角度によって画像が乱れるのを確認できると思います。

#module ;---------------------------------------------------------------; ; gturn p1, p2, p3, p4 ; ; posで指定した座標を中心にgsquareで画像をコピーします ; ; ; ; p1 = コピー元のウィンドウID ; ; p2 = コピー元のX座標が入った配列変数(gsquareと同じ扱い) ; ; p3 = コピー元のY座標が入った配列変数(gsquareと同じ扱い) ; ; p4 = 回転角度(ラジアン) ; ;---------------------------------------------------------------; #deffunc gturn int SrcID, array SrcX, array SrcY, double Θ ; 4つの座標から擬似的な中心点を求める xc = ((SrcX(1)+SrcX(2))-(SrcX(0)+SrcX(3))) / 4 + (SrcX(0)+SrcX(3)) / 2 yc = ((SrcY(2)+SrcY(3))-(SrcY(0)+SrcY(1))) / 4 + (SrcY(0)+SrcY(1)) / 2 repeat 4 ; 0で除算を避ける為に実数に変換する x2(cnt) = double(SrcX(cnt))-xc y2(cnt) = double(SrcY(cnt))-yc ; 角度と半径を求める rot(cnt) = atan(x2(cnt), y2(cnt)) ; 0除算回避 sin_k = sin(rot(cnt)) if sin_k = 0.0 { rad(cnt) = x2(cnt) } else { rad(cnt) = x2(cnt)/sin_k } loop ; 変数の型が違いますを避ける為に整数に変換する repeat 4 DestX(cnt) = int(sin(rot(cnt)+Θ) * rad(cnt)) + ginfo_cx DestY(cnt) = int(cos(rot(cnt)+Θ) * rad(cnt)) + ginfo_cy loop gsquare SrcID, DestX, DestY, SrcX, SrcY return #global ;gsel 0,-1 a=22 screen 60,300,300,0,200,200:font "MS Pゴシック",a,0:title "元" screen 61,300,300,0,510,200:font "MS Pゴシック",a,1:title "先" gsel 60:pos 110,138:mes "サンプル" b=ginfo_mesx c=ginfo_mesy line (110+b),138,110,138 line 110+b,138+a,110,138+a color 255,0,0 sx=0,300,300,0 sy=0,0,300,300 gsel 61 t= 0.0 repeat redraw 0 color 255, 255, 255 : boxf gmode 4, , , 255 color 255, 255, 255 pos 150, 150 gturn 60, sx, sy, t t+0.01 redraw 1 wait 20 loop stop



fortunehill

リンク

2013/9/6(Fri) 14:28:59|NO.56929

/*勘違いだったかも(じゃー無理やり)*/

#uselib "gdi32.dll" #func global CreateFontIndirectA "CreateFontIndirectA" sptr #func global SelectObject "SelectObject" sptr,sptr #func global DeleteObject "DeleteObject" sptr : aa = 450 dim nn,16 : nn(0) = 32,0,aa,0,400 poke nn(5),0,0 :poke nn(5),1,0 poke nn(5),2,0 :poke nn(5),3,128 poke nn(6),0,0 :poke nn(6),1,0 poke nn(6),2,2 :poke nn(6),3,49 : ff = "MS Pゴシック" memcpy nn(7),ff,32 :CreateFontIndirectA varptr(nn) :_hFnt = stat SelectObject hdc,_hFnt pos 100,100 :mes "サンプル" font ff,32 :mes "サンプル" redraw :DeleteObject _hFnt



ヒヨ

リンク

2013/9/6(Fri) 23:42:22|NO.56948

お二人とも凄い

ありさんの「Artlet2Dを利用した例」と、
fortunehillさんの「ムリヤリ」が、求めてたものです。
両方とも読み込んで勉強させてもらいます。
なんとか完読して、組み込んでみたいと思います。

その他の二つも参考になります。
大変助かりました。有り難うございました。



ヒヨ

リンク

2013/9/7(Sat) 10:13:10|NO.56954

追伸
一晩たっての感想

ありさんの「Artlet2Dを利用した例」は理解出来たけど、
fortunehillさんの「ムリヤリ」は、全然理解できないw
poke命令とかポケコンの時は使ってたけど、HSPで使った事無いし
#func global もヘルプ読んでも理解不能でした。
今作ってるのが完成したら、この二つを勉強します。

お二人とも、有り難うございました。



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