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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0206
あんがら。外部DLLの読み込みに失敗しました。8未解決


あんがら。

リンク

2007/2/6(Tue) 23:38:12|NO.5482

E3Dで格闘ゲームを作っています。
それで、キャラクターがリングアウトするなどした時に、スプライトを表示するようにしよ
うとしたのですが、
”line750(hspcmp)外部DLLの読み込みに失敗しました。”
と表示されてしまうのです。(前に、ファイルの名前を打ちまちがえたときも、同じエラー
メッセージがでたので、DLLでなくとも”DLLの読み込みに失敗しました。”と出る場
合があるようです。)750行目にはE3DRenderSpliteと書いてあるので多分、画像の読み込み
に失敗したのか?と思って調べてみましたが、名前もファイルパスも合っていました。
自分ではどこが間違っているのかが調べても分かりません。どなたか、教えて下さい。
よろしくお願いします。


bgscr 0,ginfo_dispx,ginfo_dispy,0,0,0,ginfo_dispx,ginfo_dispy CHARA = 1 *GAME #include "e3dhsp3.as" bgscr 0,ginfo_dispx,ginfo_dispy,0,0,0,ginfo_dispx,ginfo_dispy ; ステージ1 *CGAME #module #deffunc waitbyfps int p1, var fps E3DWaitbyFPS@ p1, fps await 1 return #global dim keybuf, 512 pointmax = 150 ;点数の最大値 max = 30 screenw = ginfo_dispx : screenh = ginfo_dispy bgscr 0, screenw, screenh, 1 ;初期化 E3DEnableDbgFile E3DInit 0, -1, 0, 16, 0, scid1 ;カメラの初期化 camposx = 0.0 : camposy = 1500.0 : camposz = -6000.0 E3DSetCameraPos camposx, camposy, camposz camdegxz = 180.0 : camdegy = 0.0 E3DSetCameraDeg camdegxz, camdegy afterimagenum = 5 confflag = 0 endflag = 0 ;file のpath 用のバッファーの作成 pathlen = 2048 sdim mediadir, pathlen mediadir = dir_cur + "\\stage1" sdim pathbuf, pathlen, 2 ;projectionの変更をしたいときは、以下の2行を有効にしてください。 proj_near = 100 : proj_far = 20000 : proj_fov = 50 E3DSetProjection proj_near, proj_far, proj_fov E3DCreateProgressBar E3DSetProgressBar 0 ;地面データのロード pathbuf.0 = mediadir + "\\gl.sig" E3DSigLoad pathbuf.0, hsid0 posx0 = 0.0 : posy0 = 0.0 : posz0 = 0.0 degx0 = 0.0 : degy0 = 0.0 : degz0 = 0.0 E3DSetPos hsid0, posx0, posy0, posz0 E3DSetDir hsid0, degx0, degy0, degz0 frameno0 = 0 E3DSetProgressBar 30 ;”てき”データのロード pathbuf.0 = mediadir + "\\teki.sig" E3DSigLoad pathbuf.0, hsid1 pathbuf.0 = mediadir + "\\tekiidling.qua" E3DAddMotion hsid1, pathbuf.0, mk1_idling, max1_idling pathbuf.0 = mediadir + "\\tekipunch.qua" E3DAddMotion hsid1, pathbuf.0, mk1_punch, max1_punch pathbuf.0 = mediadir + "\\tekikick.qua" E3DAddMotion hsid1, pathbuf.0, mk1_kick, max1_kick pathbuf.0 = mediadir + "\\tekiact1.qua" E3DAddMotion hsid1, pathbuf.0, mk1_act1, max1_act1 pathbuf.0 = mediadir + "\\tekidefense.qua" E3DAddMotion hsid1, pathbuf.0, mk1_defense, max1_defense pathbuf.0 = mediadir + "\\teki_junp.qua" E3DAddMotion hsid1, pathbuf.0, mk1_junp, max1_junp pathbuf.0 = mediadir + "\\teki_huse.qua" E3DAddMotion hsid1, pathbuf.0, mk1_huse, max1_huse pathbuf.0 = mediadir + "\\tekiwin.qua" E3DAddMotion hsid1, pathbuf.0, mk1_win, max1_win pathbuf.0 = mediadir + "\\tekifinal.qua" E3DAddMotion hsid1, pathbuf.0, mk1_final, max1_final pathbuf.0 = mediadir + "\\teki_ua.qua" E3DAddMotion hsid1, pathbuf.0, mk1_ua, max1_ua ; E3DSetProgressBar 60 stepfast = 2;モーションの速さ ;遅いマシンで使用する方は、以下の行を有効にしてください。 ;(モーションが荒くなりますが、速く見えます) E3DSetMotionStep hsid1, mk1_idling, stepfast;速くするモーションの種類 E3DSetMotionStep hsid1, mk1_punch, stepfast E3DSetMotionStep hsid1, mk1_kick, stepfast E3DSetMotionStep hsid1, mk1_act1, stepfast E3DSetMotionKind hsid1, mk1_idling posx1 = 1000.0 : posy1 = 0.0 : posz1 = 0.0 degx1 = 0.0 : degy1 = 90.0 : degz1 = 0.0 E3DSetPos hsid1, posx1, posy1, posz1 E3DSetDir hsid1, degx1, degy1, degz1 frameno1 = 0 newmk1 = 0 point1 = pointmax sspoint1 =10;sspointmax ;キャラのロード if CHARA=1 { pathbuf.0 = mediadir + "\\na_parts_1_bone.sig" E3DSigLoad pathbuf.0, hsid2 pathbuf.0 = mediadir + "\\na_parts1_idling.qua" E3DAddMotion hsid2, pathbuf.0, mk2_idling, max2_idling pathbuf.0 = mediadir + "\\na_parts1_punch.qua" E3DAddMotion hsid2, pathbuf.0, mk2_punch, max2_punch pathbuf.0 = mediadir + "\\na_parts1_kick.qua" E3DAddMotion hsid2, pathbuf.0, mk2_kick, max2_kick pathbuf.0 = mediadir + "\\na_parts1_act1.qua" E3DAddMotion hsid2, pathbuf.0, mk2_act1, max2_act1 pathbuf.0 = mediadir + "\\na_parts1_defense.qua" E3DAddMotion hsid2, pathbuf.0, mk2_defense, max2_defense pathbuf.0 = mediadir + "\\na_parts1_win.qua" E3DAddMotion hsid2, pathbuf.0, mk2_win, max2_win pathbuf.0 = mediadir + "\\na_parts1_final.qua" E3DAddMotion hsid2, pathbuf.0, mk2_final, max2_final pathbuf.0 = mediadir + "\\sawablast.qua" E3DAddMotion hsid2, pathbuf.0, mk2_blast, max2_blast pathbuf.0 = mediadir + "\\ua.qua" E3DAddMotion hsid2, pathbuf.0, mk2_ua, max2_ua ;遅いマシンで使用する方は、以下の行を有効にしてください。 ;(モーションが荒くなりますが、速く見えます) E3DSetMotionStep hsid2, mk2_idling, stepfast E3DSetMotionStep hsid2, mk2_punch, stepfast E3DSetMotionStep hsid2, mk2_kick, stepfast E3DSetMotionStep hsid2, mk2_act1, stepfast E3DSetProgressBar 90 E3DSetMotionKind hsid2, mk2_idling posx2 = -1000.0 : posy2 = 0.0 : posz2 = 0.0 degx2 = 0.0 : degy2 = -90.0 : degz2 = 0.0 E3DSetPos hsid2, posx2, posy2, posz2 E3DSetDir hsid2, degx2, degy2, degz2 frameno2 = 0 newmk2 = 0 point2 = pointmax sspoint2 = 10;sspointmax ;乱数のテスト ;seed = 65536 ;E3DSeed seed ;以下、ライトの設定 lightdirx1 = 0.0 lightdiry1 = -2.0 lightdirz1 = 1.0 lightr1 = 200 lightg1 = 180 lightb1 = 150 ;平行光源 E3DCreateLight lid1 E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1 lightposx2 = 0.0 lightposy2 = 500.0 lightposz2 = 0.0 lightdist2 = 2000.0 lightr2 = 190 lightg2 = 150 lightb2 = 90 ;ポイントライト E3DCreateLight lid2 E3DSetPointLight lid2, lightposx2, lightposy2, lightposz2, lightdist2, lightr2, lightg2, lightb2 pathbuf.0 = mediadir + "\\lake.bmp" pathbuf.1 = mediadir + "\\cloud3.bmp" E3DCreateBG scid1, pathbuf.0, pathbuf.1, 0.001, 0.0, 0 switchflag1 = 0 pathbuf.0 = mediadir + "\\bar.bmp" E3DCreateSprite pathbuf.0, 1, spriteid0 E3DGetSpriteSize spriteid0, spritew0, spriteh0 pathbuf.0 = mediadir + "\\bar2.bmp" E3DCreateSprite pathbuf.0, 1, spriteid1 E3DGetSpriteSize spriteid1, spritew0, spriteh0 pathbuf.0 = mediadir + "\\KLG.bmp" E3DCreateSprite pathbuf.0, 0, spriteid2 E3DGetSpriteSize spriteid2, spritew0, spriteh0 pathbuf.0 = mediadir + "\\KO.bmp" E3DCreateSprite pathbuf.0, 0, spriteid3 E3DGetSpriteSize spriteid3, spritew30, spriteh40 pathbuf.0 = mediadir + "\\MATER.bmp" E3DCreateSprite pathbuf.0, 1, spriteid4 E3DGetSpriteSize spriteid4, spritew4, spriteh1 pathbuf.0 = mediadir + "\\RingOut.bmp" E3DCreateSprite pathbuf.0, 1, spriteid5 E3DGetSpriteSize spriteid5, spritew4, spriteh1 pathbuf.0 = mediadir + "\\DRAW.bmp" E3DCreateSprite pathbuf.0, 1, spriteid6 E3DGetSpriteSize spriteid6, spritew4, spriteh1 chkfps1 = 0 confstat = 0 cls 4 E3DDestroyProgressBar randomize *main ; keybuf変数は、メインループの外で、dim keybuf, 256 として、確保しておいてください。 E3DGetKeyboardState keybuf if keybuf.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了 ;乱数のテスト ;range = 15 ;E3DRand range, rand gosub *MoveCamera ;if HENSIN = 1:gosub *CreateLight;ライト設定 if endflag = 1 :goto *OVER if endflag = 0 { gosub *MoveChara1 attackflag = 0 g = 0 gosub *MoveChara2 } E3DSetNewPose hsid1, frameno1 E3DSetNewPose hsid2, frameno2 E3DChkInView scid1, hsid0 E3DChkInView scid1, hsid1 E3DChkInView scid1, hsid2 E3DBeginScene scid1 ;不透明部分の描画をする E3DRender scid1, hsid0, 0, frameno0, 0 E3DRender scid1, hsid1, 0, frameno1, 0 E3DRender scid1, hsid2, 0, frameno2, 0 ;半透明部分の描画をする E3DRender scid1, hsid1, 1, frameno1, 0, 0, 1, 1 E3DRender scid1, hsid2, 1, frameno2, 0, 0, 1, 1 gosub *DrawText gosub *DrawIndicator E3DEndScene E3DPresent scid1 E3DChkConflict hsid0, hsid1, Ring, conf;リングアウトしているかどうかしらべる。 E3DChkConflict hsid0, hsid2, RingO, conf if Ring=0{ E3DSetPos hsid1,,-30.0,, goto *RingOut } if RingO=0{ E3DSetPos hsid2,,-30.0,, goto *RingOut } E3DChkConflict hsid1, hsid2, confflag, confstat if ( confstat > 0 ){ ;オブジェクトが視野外に出たときは、E3DChkConflictは機能しないので、代わりの関数を使う。 E3DChkConfBySphere hsid1, hsid2, 2, confflag } gosub *ChangePhysicalPoint waitbyfps 150, chkfps1 goto *main *bye picload "Quitnow.jpg" E3DBye end *MoveCamera ;*** cameraの注視点を、2体の中心にセットする E3DGetPos hsid1, posx1, posy1, posz1 E3DGetPos hsid2, posx2, posy2, posz2 targetposx = ( posx1 + posx2 ) / 2.0 targetposy = (( posy1 + posy2 ) / 2.0)+1500 targetposz = ( posz1 + posz2 ) / 2.0 upvecx = 0.0 : upvecy = 1.0 : upvecz = 0.0 E3DSetCameraTarget targetposx, targetposy, targetposz, upvecx, upvecy, upvecz ;*** 外積を使って、cameraの位置をセットする vecx1 = posx2 - posx1 vecy1 = posy2 - posy1 vecz1 = posz2 - posz1 cameradist = (posx1 - posx2) + 2500 E3DCross vecx1, vecy1, vecz1, upvecx, upvecy, upvecz, crossx, crossy, crossz crossx *= cameradist crossy *= cameradist crossz *= cameradist camposx = targetposx + crossx camposz = targetposz + crossz camposy = 2000 E3DSetCameraPos camposx, camposy, camposz return *CreateLight;ライト lightposx3 = 0.0 lightposy3 = 500.0 lightposz3 = -2000.0 lightdirx3 = 0.0 lightdiry3 = 0.0 lightdirz3 = 1.0 lightdist3 = 4000.0 lightangle3 = 20.0 lightr3 = 0 lightg3 = 0 lightb3 = 0 ;スポットライト E3DCreateLight lid3 E3DSetSpotLight lid3, lightposx3, lightposy3, lightposz3, lightdirx3, lightdiry3, lightdirz3, lightdist3, lightangle3, lightr3, lightg3, lightb3 *MoveChara1 ;hsid1のキャラクタの動作制御 k=0 forwardstep = 80.0 backstep = -100.0 degstep = 7.0 mdegstep = -degstep if attackflag = 0{ a=rnd (7) b=rnd (32) ; ;c=rnd (100) ; ;d=rnd (100) e=rnd (80) f=rnd (80) } if attackflag = 1 { if puntiflag = 1 : f = rnd (13) if kickflag = 1 : e = rnd (14) if actflag = 1 : f = rnd (12) if attackflag = 1 :g = rnd (5):attackflag = 0 } if attackflag = 1: ; VK_ が頭につく、定数の詳細は、e3dhsp_vk.as をご覧ください。 ; keybuf は、GetKeyboardState 命令で、セットされます。 if a = 1 : k+= 1 ;前移動 if b = 2 : k+= 2 ;後移動 ;if c = 4 : k+= 4 左 ;if d = 8 : k+= 8 右 if e = 16 : k+= 16 ;パンチ if f = 20 : k+= 32 ;キック if g = 1 : k+= 64 attackflag = 0 E3DGetMotionKind hsid1, curmk1 newmk1 = curmk1 ;モーションのフレーム番号が、最大値に到達したら、モーションをidlingに戻す。 if (curmk1 = mk1_punch)&(frameno1 >= max1_punch) : newmk1 = mk1_idling if (curmk1 = mk1_kick)&(frameno1 >= max1_kick) : newmk1 = mk1_idling if (curmk1 = mk1_defense)&(frameno1 >= max1_defense) : newmk1 = mk1_idling if (curmk1 = mk1_act1)&(frameno1 >= max1_act1) : newmk1 = mk1_idling ;キーに応じて、新しいアクションをセットする。相手方向を向くようにする。 if (curmk1 = mk1_idling) & ((k&16) != 0) : newmk1 = mk1_punch : E3DDirToTheOtherXZ hsid1, hsid2 if (curmk1 = mk1_idling) & ((k&32) != 0) : newmk1 = mk1_kick : E3DDirToTheOtherXZ hsid1, hsid2 if (curmk1 = mk1_idling) & ((k&64) != 0) : newmk1 = mk1_defense : E3DDirToTheOtherXZ hsid1, hsid2 if (curmk1 = mk1_idling) & ((k&16) != 0) & ((k&32) != 0) : newmk1 = mk1_act1 : E3DDirToTheOtherXZ hsid1, hsid2 if curmk1 = mk1_idling : E3DDirToTheOtherXZ hsid1, hsid2 if newmk1 != curmk1 : E3DSetMotionKind hsid1, newmk1 if (newmk1 != curmk1) & (newmk1 = mk1_act1) : E3DCreateAfterImage hsid1, afterimagenum : E3DSetAlpha hsid1, 1 ;キーに応じて、移動、回転をする。 if newmk1 = mk1_idling { if k&1 : E3DPosForward hsid1, forwardstep if k&2 : E3DPosForward hsid1, backstep ;if k&4 : E3DRotateY hsid1, mdegstep ;if k&8 : E3DRotateY hsid1, degstep } ;confflagが0で無い場合、2体が重なりすぎないように、離す。 if (confflag != 0) & ( (newmk1 = mk1_idling) | (newmk1 = mk1_defense) ) : E3DSeparateFrom hsid1, hsid2,2.0 attackflag = 0 return *MoveChara2 ;hsid2のキャラクタの動作制御 k=0 forwardstep = 110.0 backstep = -200.0 ;degstep = 6.0 ;mdegstep = -degstep ; VK_ が頭につく、定数の詳細は、e3dhsp_vk.as をご覧ください。 ; keybuf は、GetKeyboardState 命令で、セットされます。 if keybuf.'A' = 1 : k+=1 ;前進 if keybuf.'Z' = 1 : k+=2 ;後退 ;if keybuf.'Z' = 1 : k+=4 ;左 ;if keybuf.'C' = 1 : k+=8 ;右 if keybuf.'B' = 1 : k+=16 ;弱攻撃 if keybuf.'N' = 1 : k+=32 ;中攻撃 if keybuf.'M' = 1 : k+=128 ;強攻撃 if keybuf.'W' = 1 : k+=256 ;ジャンプ if keybuf.'S' = 1 : k+=512 ;伏せ E3DGetMotionKind hsid2, curmk2 newmk2 = curmk2 ;モーションのフレーム番号が、最大値に到達したら、モーションをidlingに戻す。 if (curmk2 = mk2_punch)&(frameno2 >= max2_punch) : newmk2 = mk2_idling if (curmk2 = mk2_kick)&(frameno2 >= max2_kick) : newmk2 = mk2_idling if (curmk2 = mk2_defense)&((k&64) = 0)&(frameno2 >= max2_defense) : newmk2 = mk2_idling if (curmk2 = mk2_act1)&(frameno2 >= max2_act1) : newmk2 = mk2_idling : E3DDestroyAfterImage hsid2 : E3DSetAlpha hsid2, 0 if (curmk2 = mk2_blast)&(frameno2 >= max2_blast) :newmk2 = mk2_idling if (curmk2 = mk2_ua)&(frameno2 >= max2_ua) :newmk2 = mk2_idling ;キーに応じて、新しいアクションをセットする。相手方向を向くようにする。 if (curmk2 = mk2_idling) & ((k&16) != 0) : newmk2 = mk2_punch : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & ((k&32) != 0) : newmk2 = mk2_kick : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & ((k&64) != 0) : newmk2 = mk2_defense : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & ((K&32) != 0) :sspoint2<10 : sspoint-10 : newmk2 = mk2_blast :E3DDirToTheOtherXZ hsid2,hsid1 if (curmk2 = mk2_idling) & ((k&128) != 0) & ((k&32) != 0) : newmk2 = mk2_act1 : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & X=1:newmk2 = mk2_ua :X=0: E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) : E3DDirToTheOtherXZ hsid2, hsid1 if newmk2 != curmk2 : E3DSetMotionKind hsid2, newmk2 if (newmk2 != curmk2) & (newmk2 = mk2_act1) : E3DCreateAfterImage hsid2, afterimagenum : E3DSetAlpha hsid2, 1 ;キーに応じて、移動、回転をする。 if newmk2 = mk2_idling { if k&1 : E3DPosForward hsid2, forwardstep if k&2 : E3DPosForward hsid2, backstep ;if k&4 : E3DRotateY hsid2, mdegstep ;if k&8 : E3DRotateY hsid2, degstep } ;confflagが0で無い場合、2体が重なりすぎないように、離す。 if (confflag != 0) & ( (newmk2 = mk2_idling) | (newmk2 = mk2_defense) ) : E3DSeparateFrom hsid2, hsid1 return *RingOut E3DDestroySprite spriteid0 E3DDestroySprite spriteid1 ; E3DDestroySprite spriteid2 ; E3DDestroySprite spriteid3 E3DDestroySprite spriteid4 E3DBeginSprite E3DRenderSprite spriteid5, 0, 0, 0, 0,0.0 E3DEndSprite if Ring=1:OWINER=1:goto *OVER if RingO=1:TWINER=1:goto *OVER if Ring=1&RingO=1:E3DDestroySprite spriteid5:DRAWFLAG=1:goto *DRAW *DRAW E3DBeginSprite E3DRenderSprite spriteid6, 0, 0, 0, 0,0.0 E3DEndSprite wait 300 goto *CGAME *ChangePhysicalPoint ;confflag と、それぞれのモーションの種類を元に、pointの減算をする。 ;defense中は、ダメージを受けないようにする。 if confflag != 0 { ;プレイヤー if (newmk1 != mk1_defense) : point1 -= 0 if (newmk1 != mk1_defense) & ( (newmk2 = mk2_punch)): if point1>0 : point1 -= 1 :punchflag = 1:attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー if (newmk1 != mk1_defense) & ( (newmk2 = mk2_kick)) : if point1>0 : point1 -= 2 :kickflag = 1:attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー if (newmk1 != mk1_defense) & ( (newmk2 = mk2_act1)) : if point1>0 :actflag = 1: point1 -= 2 :attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー if (newmk1 != mk1_defense) & ( (newmk2= mk2_blast)): if point1>0 :blastflag = 1: point1 -= 2 :attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー ;てき if (newmk2 != mk2_defense) & ( (newmk1 = mk1_punch)):sspoint2 += 1: point2 -= 1:X=rnd (3):if sspoint1<30 :sspoint2 += 1:;てき if (newmk2 != mk2_defense) & ( (newmk1 = mk1_kick)) :sspoint2 += 1: point2 -= 2:X=rnd (3):if sspoint1<30 :sspoint2 += 1:;てき if (newmk2 != mk2_defense) & ( (newmk1 = mk1_act1)) :sspoint2 += 1: point2 -= 3:X=rnd (3):if sspoint1<30 :sspoint2 += 1:;てき if (newmk2 != mk2_defense) : point2 -= 0 } ;どちらかのpointがゼロになった時の処理 if endflag = 0 { if point1 <= 0 { E3DDestroyAfterImage hsid1 E3DSetAlpha hsid1, 0 newmk1 = mk1_final E3DSetMotionKind hsid1, newmk1 E3DDestroyAfterImage hsid2 E3DSetAlpha hsid2, 0 newmk2 = mk2_win E3DSetMotionKind hsid2, newmk2 TWINER=1 endflag = 1 }else{ if point2 <= 0 { E3DDestroyAfterImage hsid1 E3DSetAlpha hsid1, 0 newmk1 = mk1_win E3DSetMotionKind hsid1, newmk1 E3DDestroyAfterImage hsid2 E3DSetAlpha hsid2, 0 newmk2 = mk2_final E3DSetMotionKind hsid2, newmk2 OWINER=1 endflag = 1 } } } return *DrawText E3DGetFPS FPS textposx = 10 : textposy = 10 textr = 230 : textg = 50 : textb = 50 textscale = 10 str1 = "Player s H P : " + point2 E3DDrawText textposx, textposy, textscale, textr, textg, textb, str1 textposx = 500 str2 = "TEKI s H P : " + point1 E3DDrawText textposx, textposy, textscale, textr, textg, textb, str2; if endflag = 1 { wstep = 30.0;KO hstep = 30.0;縦の倍率 hpos = 350 wpos1 = 500 scale = 0.0 scale = wstep * 3.0 / spritew0 scale1 = 38 scaley = 0.0 scaley = hstep / spriteh0 E3DBeginSprite E3DRenderSprite spriteid2, scale1, scaley, 10, 700 E3DEndSprite } textposx = 10 : textposy = 700 str5 = "FPS=" + fps E3DDrawText textposx, textposy, textscale, textr, textg, textb, str5 ;textposx = 10 : textposy = 320 ;str6 = "confstat " + confstat ;E3DDrawText textposx, textposy, textscale, textr, textg, textb, str6 return *DrawIndicator wstep = double(screenw) / 12.0 hstep = double(screenh) / 32.0 hpos = 5.0 wpos1 = 1.0;wstep wpos2 = 560.0;wstep * 16.0 scale = 0.0 scale = wstep * 3.0 / spritew0 scale1 = scale * point2 / pointmax scale2 = scale * point1 / pointmax scaley = 0.0 scaley = hstep / spriteh0 E3DBeginSprite E3DRenderSprite spriteid0, scale1, scaley, wpos1, hpos,0.9 E3DRenderSprite spriteid1, scale2, scaley, wpos2, hpos,0.9 E3DRenderSprite spriteid4,1.0,1.0,0,0,0.0 E3DEndSprite return *OVER stop



この記事に返信する


GENKI

リンク

2007/2/7(Wed) 00:13:19|NO.5483

> 1.不要部分の多い長いスクリプトの投稿は ご遠慮ください。

 長いスクリプトは読む気力をそぎます。
さらにそれが、そのまま実行できないとさらに読む気力がそがれます。

 まずはデバッグの基本からやってみてください。
・どこで止まっているのかdialog命令を挟むなどして絞り込む。
・明らかに不要・関係ないと思われる個所を全て削除してみる。


> 750行目にはE3DRenderSpliteと書いてあるので多分、画像の読み込み
> に失敗したのか?と思って調べてみましたが、

E3DRenderSpriteですね。(^_^;
(はじめは見つけられませんでした…。)
いくつかあるようですがどれが該当する行なのでしょう?
提示されたスクリプトは700行もありません。



93

リンク

2007/2/7(Wed) 00:36:25|NO.5486

確かに読む気なくなりました(´・ω・`)
E3D系はそれっぽい箇所にdialogで変数内容調べてくのが一番です。



Irisawa

リンク

2007/2/7(Wed) 00:45:58|NO.5488

HSPではたまに多少報告されるエラー行が前後する場合があります。
どうもプリプロセス文などが原因になっているようです。
なので、表示されるエラー行ばかりではなく数行くらい前後の行も見てみましょう。

スクリプトが長すぎてすべては見ていませんが、ぱっと見た目、でちょっと気になったのが


*GAME #include "e3dhsp3.as"

です。
基本的にincludeは途中で使用するものではなく先頭にまとめてするものです。
あと、相対パスなどで指定している場合、途中でカレントディレクトリを移動すると
正常に動作しなくなるのでご注意下さい。
エラー38は基本的にDLLから関数アドレスの取得に失敗した(エクスポートされていない
関数を宣言した)場合に表示されますのでDLL及びそのDLLからエクスポートされている
関数を見直した方がいいでしょう。



あんがら。

リンク

2007/2/10(Sat) 15:59:47|NO.5565

 ためしてみましたが、どうしてもエラーがでてしまいます。
>エクスポートされていない関数
エクスポートとはどういう意味ですか?
それと、dialog命令でデバッグするというのも分かりません。どういう意味なのか、教え
て下さい。



Kpan

リンク

2007/2/10(Sat) 16:31:14|NO.5566

みなさんが返答してくださっているとおりです。まずは、どの行で
エラーになるのか自分で特定してください。

> まずはデバッグの基本からやってみてください。
>・どこで止まっているのかdialog命令を挟むなどして絞り込む。

> E3D系はそれっぽい箇所にdialogで変数内容調べてくのが一番です。

http://quasiquote.org/hspwiki/%a5%c7%a5%d0%a5%c3%a5%b0%a4%ce%bb%c5%ca%fd



あんがら。

リンク

2007/2/10(Sat) 17:43:56|NO.5569

なんども返答してくださってありがとうございます。
dialog命令で絞り込みましたが、同じようにE3DRenderSpriteのところで止まります。
なぜか、そこを何度か通ったにもかかわらず、あるとき急に止まります。
E3DRenderSpriteでエラーになることが分かり、スプライトの画像ファイルの名前を確認
したり、ファイルパスを確認したりしましたが、全く原因が分かりません。
しつこいようですが、返答よろしくお願いします。



kz3

リンク

2007/2/10(Sat) 18:39:14|NO.5575

E3Dの質問はE3Dユーザーが集う場所で質問したほうが具体的に教えてもらえると思いますよ。まぁ最初みたいなスクリプトばばーんはちょっと嫌がられると思うけど...



あんがら。

リンク

2007/2/10(Sat) 22:03:10|NO.5579

はい。



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