2013年02月12日

漢字をひらがなに変換

方法を検索してもなかなかいい方法がみつからなかったのですが、いいのみつけたわ
http://tu3.jp/0561
なにかとつーささんの掲示板にはお世話になっていたけど、ブログあったんだね
でソースのほうは、まだ理解しておらず・・・
posted by 26℃ at 19:41| 福岡 ☁| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2012年01月29日

対称のモーション

対称のモーションを作ることに成功。
わざわざRDB2でモーション作る手間が省けました。

ボーンの回転、移動のみ対称にできたけど
テクスチャアニメのキーの情報を取得したり設定できるほうほうがわからないのが問題。

追記
以前、新しい関数つくってもらってましたE3DCopyTexAnimFrame
でもボーン指定じゃないので完全の対称コピーにはならないですね、まあいいか。

Easy3DHelp2Hsつかってみたら、フォルダ選択のあとエラーでるみたい。
e3h2h_setting.datのほうを直接編集して、フォルダ選択しないようにしたらうまくいきました。


#modfunc M_AddMotionInv var motionID, var motion_InvID, var hsid, int jointnum, array jnamebuf, array infobuf, var curqid, var curqidInv
E3DGetMotionFrameLength hsid, motionID, leng
E3DCreateEmptyMotion hsid, "inv", leng, motion_InvID
ddim vec2,3
//
repeat jointnum
boneid = infobuf.JI_SERIAL.cnt
bname = jnamebuf.cnt
mpid=-1
cnt0=cnt
//
val0 = instr(jnamebuf.cnt,0,"_X")
val1 = instr(jnamebuf.cnt,0,"_X-")
val2 = instr(jnamebuf.cnt,0,"_X+")
boneidInv = boneid
if (val1!=-1) | (val2!-1){
//逆ボーン取得
split jnamebuf.cnt, "[L]_X+", gyaku
if stat=2 : E3DGetBoneNoByName hsid, gyaku+"[R]_X-",boneidInv
//
split jnamebuf.cnt, "[R]_X-", gyaku
if stat=2 : E3DGetBoneNoByName hsid, gyaku+"[L]_X+",boneidInv
}
repeat leng
mpinfo(MPI_QUA) = curqid
E3DGetNextMP hsid, motionID, boneid, mpid, mpid
if mpid=-1 : continue
E3DGetMPInfo hsid, motionID, boneid, mpid, mpinfo
//
E3DGetQAxisAndDeg mpinfo(MPI_QUA),ax,ay,az,degptr
E3DSetQAxisAndDeg curqidInv,ax,-ay,-az,degptr
E3DSetBoneQ hsid, boneidInv, motion_InvID, mpinfo(MPI_FRAMENO), curqidInv, 0
//
vec2=double(-mpinfo(MPI_TRAX)),double(mpinfo(MPI_TRAY)),double(mpinfo(MPI_TRAZ))

E3DSetBoneTra hsid, boneidInv, motion_InvID, mpinfo(MPI_FRAMENO), vec2
loop
loop
//
E3DGetMotionType hsid, motionID, typeptr
E3DSetMotionType hsid, motion_InvID, typeptr
return


posted by 26℃ at 23:34| 福岡 ☀| Comment(2) | hspメモ | このブログの読者になる | 更新情報をチェックする

2011年06月19日

ダイクストラ法

ダイクストラ、最短ルートをけんさくするアルゴリズムですね。
HSPで作ってみました。

丸一日かかったきがする、主にボーンを道のデータに変えるのに時間がかかったorz

ダイクストラ法.zip
単純な道でしか試してないので、バグがあるかも。
ボーンで道を作ったので複雑な道がつくれないorz
道を繋げてループのようなことができないので、ちゃんとしたルートを作るためには
ボーン以外の方法がよさそう。
posted by 26℃ at 01:52| 福岡 ☔| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2011年06月10日

unicode

フォントの画像の使い方を忘れてしまったので
フォント 画像 hsp
ビットマップフォント hsp
とかで検索して、画像のフォントを利用する方法を検索してたけど。
まったく引っかからない。
やっと、文字列をunicodeに変換することを思い出しましたよ。

#define mx 64 //フォントマップのXサイズ
#define my 96 //フォントマップのYサイズ
#define fx 4 //1文字のXサイズ
#define fy 6 //1文字のYサイズ

cnvstow p1,"0"
mes p1

mes 64/4
mes 96/6
mes (64/4) * (96/6)

mes "y"+p1/16
mes "x"+(p1¥16)

文字単位で画像の位置を取得するほうほうはこんな感じですね。
2文字以上の文字列の場合は文字一つずつに分けて処理するしかないのかな。
posted by 26℃ at 17:55| 福岡 ☔| Comment(4) | hspメモ | このブログの読者になる | 更新情報をチェックする

2011年06月05日

おっぱいさんぷる

オッパイモジュールのサンプル

ボインさん.zip

このサンプルだとローカルな動きしかしていないので。
モデルを移動させたりする、グローバルな動きだとオッパイのパラメーターを修正する必要が
でてきます。
posted by 26℃ at 03:09| 福岡 ☁| Comment(9) | hspメモ | このブログの読者になる | 更新情報をチェックする

2011年05月11日

おっぱい

以前、2chでオッパイモジュールが出回ってたけど
無くしたので自分でつくってみました

//おっぱい
#module mOPPAI k,a,oldp,l,Y,Yp , XZk,XZa,XZoldp,XZl,XZ,XZp,bone0,bone1 , qid,kakudo,kakudoXZ , px2,py2,pz2
#modinit int p1,int p2
;バネ
;p' = p * a + l * k
;変化量は、変化量をp'、直前の変化量をp、「ばね」をk、「減衰」をa、バネの伸びをlとすると
k=0.55; 1.0に近いほど揺れが激しい
a=0.7; 1.0に近いほど治まりが遅い
oldp=0.0
l=0.0
Y=0.0
Yp=0.0
//////////////
XZk=0.55
XZa=0.6
XZoldp=0.0
XZl=0.0
XZ=0.0
XZp=0.0
//
bone0=p1
bone1=p2
E3DCreateQ qid
return
#modfunc OPPAIMain var p1, int p2, int p3
hsid1=p1
curmk=p2
curframe=p3

//揺らす計算
Y+=kakudo*5.0
l=oldp-Y

Yp=Yp*a+l*k
Y+=Yp
//揺らす計算
XZ+=kakudoXZ*5.0
XZl=XZoldp-XZ

XZp=XZp*XZa+XZl*XZk
XZ+=XZp

//揺れすぎ補正
if Y> 30:Y=30.0:Yp=0.0
if Y<-30:Y=-30.0:Yp=0.0
//揺れすぎ補正
if XZ> 30:XZ=30.0:XZp=0.0
if XZ<-30:XZ=-30.0:XZp=0.0

//ボーン位置取得
E3DGetCurrentBonePos hsid1,bone0,1,px0,py0,pz0
E3DGetCurrentBonePos hsid1,bone1,1,px1,py1,pz1

//オッパイ初期化
E3DinitQ qid
//オッパイ揺れ設定
E3DRotateQX qid,Y
E3DRotateQY qid,XZ
E3DSetBoneQ hsid1,bone1,curmk,curframe,qid,0

//揺れ角度取得
vx0=px1-px0
vy0=py1-py0
vz0=pz1-pz0
vx1=px1-px2
vy1=py1-py2
vz1=pz1-pz2
E3DDot vx0,vy0,vz0,vx1,vy1,vz1,dotY
E3DACos dotY,kakudo
E3DDot vx0,0.0,vz0,vx1,0.0,vz1,dotXZ
E3DACos dotXZ,kakudoXZ

//古い座標
E3DGetCurrentBonePos hsid1,bone0,1,px2,py2,pz2
return
#global


これでeasy3dに胸の弾むゲームが溢れると思います。
posted by 26℃ at 20:42| 福岡 🌁| Comment(7) | hspメモ | このブログの読者になる | 更新情報をチェックする

2011年02月01日

undo redo

memcpyという命令で配列のコピーが簡単にできることを最近しって利用しているのですが
アンドゥ、リドゥが簡単になりました。

あと、ここのブログがわかりやすい。
http://blog.livedoor.jp/hiro_2d/archives/414860.html
posted by 26℃ at 21:16| 福岡 ☁| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2010年11月28日

ペイント

描画の高速化
凝ったペイントソフトをつくるとなると
線をバッファーに描き
バッファーをメインウィンドウに貼り付けるという手順になると思いますが

バッファーのサイズをそのままメインウィンドウにgcopy gzoomすると
最大化したじょうだいで描いたりしたら、激重になります。

昨日はそれで製作をあきらめようかと考えたほど・・・・

で、解決策は1フレームで線をかいたぶんだけgcopy していく方法です
以前は1024*728をgcopyしていたのが30*40とかそのぐらいで済むようになりました

WS000015.png

posted by 26℃ at 01:29| 福岡 ☀| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2010年11月07日

累乗のバグ

#include "e3dhsp3.as"
#include "hspmath.as"
E3DInit 0, -1, 0, 16, 0, scid1
mes powf(2, 15)
mes pow(2, 15)


E3DInitを使った後、powfまたはpowすると計算が異なる、32768になるべきなのに32767になったりする

モジュールを調べると
expf(logf(%1)*(%2))
とあってexpfとlogfから返された数値はどれもおかしい

E3DInit と何の関係があるんだろうか

http://www.hspcenter.com/hsptvm/archives/1/index.html
2009年06月10日の記事に似たようなことが書いてあるけど、関係あるのかな
intと関係ない話なのでこの現象とはまた別の話かな。

(1 <<15)でも2の累乗の計算できるのでこれでいっか。
posted by 26℃ at 03:04| 福岡 ☔| Comment(4) | hspメモ | このブログの読者になる | 更新情報をチェックする

2010年05月27日

HSP3でつくる簡単3Dゲーム


「HSPでつくる簡単3Dゲーム」が「HSP3」用に完全改訂されました!!
本のサイズもB5からA5と控えめになり値段も若干控えめになってます。

注目するとこは一部モデルが差し替えられて、自分が作った素材モデルが使われてますw

HSPのHGIMGを使って3Dゲーム製作に挑戦してみたい方は読んでみてはどうでしょうか。

HSP Ver2.61版のHSP3でつくる簡単3Dゲームを購入されてる方には、物足りない感じがすると思いますね。
まさに完全改訂!!

Ver2.61版のHSP3でつくる簡単3Dゲームを購入されてる方は続きを読む
posted by 26℃ at 17:54| 福岡 ☁| Comment(2) | hspメモ | このブログの読者になる | 更新情報をチェックする

2009年09月14日

えいみんぐ

完全版

ボーンをどれだけ曲げるかを計算するために、円と直線の交点を求めることがポイント

moaの補間に対応、マルチモーションだと別の補間方法がひつようになるかも

2chのほうに、moaの保存でアイドリングを設定しろとダイアログが
でると書き込んだのは自分だったのですが
このデータがそうなります。

aim2.zip

追記
ほんとの完全版
どんどん活用してクレよな!!
aim3.zip

追記
欠点は、カメラが壁の後ろにあると壁をねらってしまうところ
裏面は省いて、表面しかねらえないようにしたいけど
今の関数じゃ無理っぽい

真の完全版
aimZ.zip

追記
ほんと最後
1フレームに1クォータニオンは使いすぎだね、ねらう時のモーションは制止状態のほうがいいかも。
そのほうが1フレームの情報しかいらないのでクォータニオン1つだけで足ります。
aimGT.zip

追記
E3DGetBonePosがE3DSetScaleの結果を反映してないので
個人で設定してください。
posted by 26℃ at 12:55| 福岡 ☁| Comment(7) | hspメモ | このブログの読者になる | 更新情報をチェックする

2009年09月12日

エイミング

ねらうサンプル

解りにくいです、すいません
aim.zip
posted by 26℃ at 03:09| 福岡 ☁| Comment(2) | hspメモ | このブログの読者になる | 更新情報をチェックする

2009年08月28日

紐 糸 ロープ ワイヤー

ほんとこれが最後
モデル7.hsp
糸が伸びないかわりに、ぎこちない動きをします
Damperの値でトリッキーな動きを軽減させれます
posted by 26℃ at 15:38| 福岡 ☁| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2009年08月18日

紐 糸 鎖 ワイヤー ロープ その他 シュミレーション 物理演算 っぽい

参考
http://homepage1.nifty.com/kaneko/wire.htm

HSPソース
himo.hsp
いいかんじ、あとは3次元にしてボーンにどう適応させるか
ボーンを移動させるとき、ボーンの向き、角度を自動で設定する
必要が出て来る。きわめて面倒くさそう・・



posted by 26℃ at 10:27| 福岡 ☀| Comment(2) | hspメモ | このブログの読者になる | 更新情報をチェックする

2009年07月08日

壁にうまらない

;通常のあたり判定、超高速で壁を突き抜けるのを防ぐ
e3dgetpos zs,zs_x2,zs_y2,zs_z2
E3DChkConfGroundPart2 zs_x,zs_y,zs_z,zs_x2,zs_y2,zs_z2,stazi,3, 0 , 1 , -10000 , result1 , ax,ay,az , nx,ny,nz
if result1=1{
e3dsetpos zs,ax,ay,az
}

e3dgetpos zs,zs_x3,zs_y3,zs_z3
;離す距離
hna=20.0
;法線ベクトル初期化
nnx=0.0
nnz=0.0

;正確な判定
repeat 30
E3DChkInView scid1, zs
E3DGetBBox zs,-1,0,minx,maxx,miny,maxy,minz,maxz
E3DChkConfGroundPart2 maxx,0,maxz,maxx,0,minz,stazi,3, 0 , 1 , -10000 , result1 , ax1,ay1,az1 , nx,ny,nz
E3DChkConfGroundPart2 minx,0,maxz,maxx,0,maxz,stazi,3, 0 , 1 , -10000 , result2 , ax2,ay2,az2 , nx2,ny2,nz2
E3DChkConfGroundPart2 minx,0,minz,minx,0,maxz,stazi,3, 0 , 1 , -10000 , result3 , ax3,ay3,az3 , nx3,ny3,nz3
E3DChkConfGroundPart2 maxx,0,minz,minx,0,minz,stazi,3, 0 , 1 , -10000 , result4 , ax4,ay4,az4 , nx4,ny4,nz4
;抜け出す
if result1=0 & result2=0 & result3=0 & result4=0 : break

if result1=1 : nnx+=nx : nnz+=nz
if result2=1 : nnx+=nx2 : nnz+=nz2
if result3=1 : nnx+=nx3 : nnz+=nz3
if result4=1 : nnx+=nx4 : nnz+=nz4

if result1=1 | result2=1 | result3=1 | result4=1 : e3dsetpos zs , zs_x3+(nnx*hna) , zs_y3 , zs_z3+(nnz*hna)

loop


リピート回数、離す距離は、モデルの移動速度に合わせて変えてください

壁の接触判定の贅沢な方法というとこでしょうか。
通常はモデルの中心点であたり判定しているのですが
バウンダリーボックスであたり判定させています
あたり判定されなくなるまでrepeatで繰り返すだけなんですけどねorz

一発で壁から離す距離を求めようとしたのですが、計算方法がわからないのでこの方法におちつきました。
これで車、バスなどの長方形なモデルでもあたり判定がうまくいきます、一押しの方法です・・もっといい方法があるかもしれませんけど。
posted by 26℃ at 01:57| 福岡 ☔| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2009年06月22日

タブレット

ビスタユーザー+タブレット操作+HSP製
の場合にクリック判定がおかしいようなので

#uselib "wintab32.dll"

#func global WTInfoA "WTInfoA" int,int,var
#func global WTOpenA "WTOpenA" int,var,int
#func global WTClose "WTClose" int
;初期化?
dim LogContext ,43
WTInfoA 4,0,LogContext
WTOpenA hwnd,LogContext,1
vWTOpen = stat
;閉じるとき
;WTClose vWTOpen

repeat
getkey k,2
if k:title "!"+LogContext+LogContext:else:title""+LogContext
wait 5
loop

こんなふうにwintab32.dllを読み込むようにしたほうがいいですよ。
posted by 26℃ at 01:22| 福岡 ☁| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2008年12月08日

全角 半角 切り替え

http://hspnext.com/hspkura/hspkura03.htm#contents27
のサンプルを見ても良くわからずorz

#module
;▼必要となるAPIや定数の定義
#uselib "IMM32.DLL"
#cfunc ImmGetContext "ImmGetContext" int
#func ImmSetOpenStatus "ImmSetOpenStatus" int,int

#deffunc imemode int prm1
hCld = objinfo(0,2)
imehwnd=ImmGetContext(hCld)
ImmSetOpenStatus imehwnd,prm1

return
#global

;***** sample *****

sdim s,260
input s,ginfo(12),22
;↓0と1に変えてね
imemode 0
stop

手直ししてこれでいいと思うけど・・・いろいろと消してしまったがいいのだろうかorz
posted by 26℃ at 18:01| 福岡 ☔| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2008年10月24日

迷路 最短ルート 

迷路もなんのその

分岐先を入力するのがやっかい
迷路の曲がり角に水晶のパーツを配置、コレをもとに
迷路を進んでいきます
カメラと壁の処理も終えました、後はPCが何処のルートにいるか検索し
それを追跡させる処理です
それが終わったらまたムービー製作でも

ss062.JPG

kokokara=6
mokuteki=17
kazu=21

dim kin,kazu

route=kokokara

dim bun,30,30
dim eda,30,30

bun.0=1
bun.1=2
bun.2=3
bun.3=1
bun.4=2
bun.5=2
bun.6=1
bun.7=3
bun.8=2
bun.9=2
bun.10=1
bun.11=2
bun.12=3
bun.13=3
bun.14=2
bun.15=2
bun.16=3
bun.17=1
bun.18=2
bun.19=3
bun.20=1



eda(0,0)=1
eda(0,1)=0,2
eda(0,2)=3,7,1
eda(0,3)=2
eda(0,4)=5,7
eda(0,5)=4,6
eda(0,6)=5
eda(0,7)=4,8,2
eda(0,8)=7,9
eda(0,9)=8,12
eda(0,10)=11
eda(0,11)=10,12
eda(0,12)=9,11,13
eda(0,13)=12,14,19
eda(0,14)=13,15
eda(0,15)=14,16
eda(0,16)=15,17,18
eda(0,17)=16
eda(0,18)=16,19
eda(0,19)=13,18,20
eda(0,20)=19



repeat
repeat kazu
if route=cnt {
a=rnd(bun.cnt)
cnt0=cnt
repeat bun.cnt
if a=cnt{
route=eda(cnt,cnt0)
kin.eda(cnt,cnt0)++
miti.su = route
su++
if route=mokuteki : break
}
loop
if route=mokuteki : break
repeat kazu
if kin.cnt>1{
su=0
route=kokokara
repeat kazu
kin.cnt=0
loop
}
loop
}
loop
if route=mokuteki : break
await
loop
mes ""+kokokara+"から"+mokuteki+"まで"
mes ""+kokokara+"からスタート"
repeat su
mes "ルート"+miti.cnt
loop
mes ""+su+"回動いた"
posted by 26℃ at 03:26| 福岡 ☁| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2008年09月21日

否定論理積 NAND

通常の攻撃ボタン 攻撃ボタンを押された瞬間を取得
弓を装備のときは 攻撃ボタンは押された長さを取得
としているのですが、stick命令だとややこしくなるんですよね

否定論理積はべんりです
((j_key1 & 4096)!4096)
標準の命令でNANDないんですかね

それと、いまだに排他的論理和を使ったことがないんですよorz


製作状況ですが
これから、防御、緊急回避を追加し
そのあとAI製作、チュートリアル製作
それが終わったらキャラクター、ステージ製作です

今日頑張ったら、チュートリアル製作ぐらいまでいけるんじゃないでしょうか
posted by 26℃ at 18:18| 福岡 ☔| Comment(0) | hspメモ | このブログの読者になる | 更新情報をチェックする

2008年07月29日

低スペックPCによるeasy3dでのモデル表示

これをしたら重くなるベスト5

1 材質(マテリアル)の数が多い(できれば1つ)
2 ボーン数が多い
3 スムージングしてない(スムージング角度180がお勧め?)
4 ポリゴン数が多い
5 UVマップが分離している(UVマップにあわせ頂点が分離?)

これを見直して、FPS42からFPS85ぐらい処理速度が変わりました

スムージングに関しては、ほんと驚きました。
スムージング角度180だとfps75
スムージング角度1だとfps60
15もの差が・・・

*ポリゴン数がいくら少なくても、マテリアル数が多いと重い
マテリアル数が増えるとびっくりするぐらいfpsが下がるので
テクスチャを5枚つかうとしてマテリアルを5つ作るのでなく、
5枚を1枚にまとめマテリアル数を1つにしたほうがいいでしょうね、試してないけど

mikotoデータのマテリアルはどう影響するかは不明です、これも試してないので

たぶんモデルのレイヤー(パート)の数も影響するんじゃないかと思います
パート数1でつくっているので、詳しくはわかりませんが
posted by 26℃ at 09:52| 福岡 ☁| Comment(2) | hspメモ | このブログの読者になる | 更新情報をチェックする

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。