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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0301
buhionewmod及びモジュール変数はdish非対応ですが、なんとかならないでしょうか(丸投げ4解決


buhio

リンク

2024/3/1(Fri) 14:48:27|NO.101351

 こんにちわ。いつもいつもお知恵を拝借で恐縮です。

 現状で、newmod命令、モジュール変数は、androidやwebglではサポートされていないようです。
 普段はwindowsメインなので、問題ないのですが、知り合いから携帯版やweb版は無いのかと言われ、拙作の移植や今後の対応を考えています。

 配列によるゲームキャラクターの管理は、今の私には限界があり、モジュール変数を使ったモジュール型変数をクラスのインスタンスのように扱っています。
 皆さんは、こういった多数の配列変数や、クラスメソッドをどのように管理しているのでしょうか。。
以下は、普段のプログラム構造のテンプレートのようなものです。
 個人的には非常に使い勝手が良いと考えており、android開発にも使いたいですが、
 やはり難しいでしょうか。何か代替的な記述方法があれば知りたいです。
 いろいろ頭をひねったのですが、うまくできませんでした。

 

;===モジュールA=== ;モジュール変数を定義 #module mod_A m_id ;モジュール全体の初期化処理用=== #deffunc local class_init return ;==モジュール変数初期化処理=== #modinit m_id=getModuleID(thismod) return m_id ;==ループ処理用メイン=== #modfunc local update color:pos 0,50+(15*m_id):mes "私はモジュールA("+m_id+")" logmes m_id return #global ;===モジュールB=== ;モジュール変数を定義 #module mod_B m_id ;モジュール全体の初期化処理用=== #deffunc local class_init return ;==モジュール変数初期化処理=== #modinit m_id=getModuleID(thismod) return m_id ;==ループ処理用メイン=== #modfunc local update color:pos 0,100+15*m_id:mes "私はモジュールB("+m_id+")" logmes m_id return #global ;---------------------------------------------- ;モジュールの初期化処理 ;各モジュール全体で使用する変数を準備したり、画像を読み込んだりする class_init@mod_A class_init@mod_B ;モジュール型変数の準備 dimtype var_A,5 dimtype var_B,5 ;モジュールの新規追加 newmod var_A,mod_A newmod var_A,mod_A newmod var_B,mod_B newmod var_B,mod_B newmod var_B,mod_B *main redraw 0 ;登場キャラクターのupdate更新をここに集約します ;プログラムがすごく機能別にすっきりし、 ;機能やキャラクターの追加がやりやすいです(個人の感想) foreach var_A:update@mod_A var_A(cnt):loop foreach var_B:update@mod_B var_B(cnt):loop redraw 1 await 1000/60 goto *main ;============================================================ ;配列cnt番号取得モジュール(お約束) ;============================================================ #module #defcfunc getModuleID var In_module, local Out_ID mref Out_ID, 1 return Out_ID #global  



この記事に返信する


buhio

リンク

2024/3/2(Sat) 15:48:47|NO.101357

 ひとりごとです。
 ひとまず、無い知恵を絞ったモジュール変数を使わずにモジュール変数っぽいことをするテスト。

 わからんこと
 ①配列を定義するのはどうするのか
 ②foreachで削除された要素を飛ばさせるのをどうするか
 ③mod_Aという名前はモジュールによって変わるが、「@mod_A」の部分をマクロで自動的に名前修正できないか?
 

;モジュール変数を使わない、疑似モジュール変数のテスト案 #module mod_A #deffunc local newclass array _list if vartype(_list)!=2{;未初期化→No.0 ;文字列型で初期化してinitへ渡す sdim _list init@mod_A _list(0),0 }else{;初期化済み→No.1~ ;要素を追加してinitへ渡す new_id=length(_list) _list(new_id)="" init@mod_A _list(new_id),new_id logmes new_id } return ;===モジュール変数の切替=== #deffunc local attach var _values ;変数をモジュール変数に分解してアタッチする命令 ; ;ここでクラスのプロパティ仕様を決めることになる ;int型 a int型b double型c 文字列型d ;①配列を実装するにはどうすればいいんだろう? dupptr a , varptr(_values) , 4 , 4 ;int dupptr b , varptr(_values)+4 , 4 , 4 ;int dupptr c , varptr(_values)+8 , 8 , 3 ;double dupptr d , varptr(_values)+16,16 , 2 ;str return #deffunc local init var _values ,int _id attach@mod_A _values ;モジュール変数を切替 ;疑似モジュール変数を初期化、代入 a=_id ;配列の要素番号を取得 b=rnd(1000) c=0.001f*b d="番号は" +a+"です" return #deffunc local update var _values attach@mod_A _values ;モジュール変数を切替 color pos 0,0+15*a mes "mod変数a: "+a+":",mesopt_nocr mes "mod変数b: "+b+":",mesopt_nocr mes "mod変数c: "+c+":",mesopt_nocr mes "mod変数d: "+d return #global ;--------------------------------------------------- ;ここからメイン処理 repeat 10 ;とりあえずモジュールを10個作成 newclass@mod_A mods ;初期化関数へ渡す loop *main redraw 0 color 255,255,255 boxf ;②削除された要素を飛ばすにはどうすればいいんだろう? foreach mods update@mod_A mods(cnt) loop await 1000/60 redraw 1 goto *main



buhio

リンク

2024/3/2(Sat) 16:03:52|NO.101358

 しまっただめだ。。dupptrはwin専用だった、、、



buhio

リンク

2024/3/4(Mon) 13:38:44|NO.101366

ららさんからアドバイスを頂き、一旦自己解決にします。



;モジュール変数を使わない、疑似クラスのテスト案 ;====================================================== ;peek poke 拡張 ;====================================================== #module peekpokeEX #deffunc local init ddim temp,64 return #deffunc dpoke var _buf,int _adr,var _value lpoke _buf,_adr+0,lpeek(_value,0) lpoke _buf,_adr+4,lpeek(_value,4) return ;実数取り出し #defcfunc dpeek var _buf,int _adr lpoke temp,0,lpeek(_buf,_adr) lpoke temp,4,lpeek(_buf,_adr+4) return temp #global ;====================================================== ;独自のクラス ;====================================================== #module class_A ;モジュールの名前をマクロ@ThisNameで置換 #define init@ThisName init@class_A #define writeval@ThisName writeval@class_A #define readval@ThisName readval@class_A ;クラス全体の初期化================================ #deffunc local initclass return ;クラスインスタンスの作成========== #deffunc local newclass array _list init@peekpokeEX;peekpoke用のtemp文字列初期化 if vartype(_list)!=2{;未初期化→No.0 ;文字列型で初期化してinitへ渡す sdim _list,64 ;最低64バイト確保 init@ThisName _list(0),0 }else{;初期化済み→No.1~ ;要素を追加してinitへ渡す new_id=length(_list) _list(new_id)="" init@ThisName _list(new_id),new_id logmes new_id } return ;クラスインスタンスの削除========== #deffunc local delclass var _value m_id=-1 ;m_idを-1にして削除表示 lpoke _value,0,m_id ;削除を保存 return ;クラス全体の破棄================================== #deffunc local termclass return ;===モジュール変数の切替=== #deffunc local readval var _value ;_valueをモジュール変数に分解してアタッチする命令 ;ここでクラスのプロパティ仕様を決めることになる ;int型 a int型b double型c 文字列型d ;①配列を実装するにはどうすればいいんだろう? m_id=lpeek(_value , 0) ;int(必ず必要) m_aa=lpeek(_value , 4) ;int m_bb=dpeek(_value , 8) ;double return #deffunc local writeval var _value ;ジュール変数セットを_valueへ書き込む命令 lpoke _value,0,m_id ;int(必ず必要) lpoke _value,4,m_aa ;int dpoke _value,8,m_bb ;double return #deffunc local init var _value ,int _id ;疑似モジュール変数を初期化、代入 m_id=_id ;配列の要素番号を取得 m_aa=rnd(1000) m_bb=0.001f*m_aa writeval@ThisName _value return #deffunc local update var _value readval@ThisName _value ;モジュール変数を切替 if m_id=-1{return} ;m_idが-1なら削除されている color pos 0,0+15*m_id mes "class変数m_id: "+m_id+":",mesopt_nocr mes "class変数m_aa: "+m_aa+":",mesopt_nocr mes "class変数m_bb: "+m_bb+":",mesopt_nocr writeval@ThisName _value ;モジュール変数を保存 return #global ;====================================================== ;メインプログラム ;====================================================== repeat 10 ;とりあえずモジュールを10個作成 newclass@class_A classes ;初期化関数へ渡す loop *main redraw 0 color 255,255,255 boxf stick keys if keys=1{delclass@class_A classes(1)};削除テスト if keys=2{delclass@class_A classes(2)};削除テスト foreach classes update@class_A classes(cnt) loop await 1000/60 redraw 1 goto *main



buhio

リンク

2024/3/4(Mon) 13:39:08|NO.101367

解決



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101351への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>~</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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