NScripter Ver.19.00
■ このスレッドは過去ログ倉庫に格納されています
商業流通でなければフリーで利用可能な ゲームエンジンNScripterについて語るスレです。 ・本家 ttp://www.nscripter.com/ ・うpろだ ttp://nscuploader.wkeya.com/ 本が手元にないから分からないけど、とりあえず *define節に autosaveoff を追加してみたらどうかしら? >>503 出来ました! とても悩んでいたので助かりました。 ありがとうございました。 セーブポイント周りの仕様は(太古の時代は知らんけど)基本互換性維持してきたNScripterの数少ない変更があった点だから本参考だと引っ掛かる 2.92以後対応の解説サイトならその辺も書いてくれてると思う gettag命令では、文字列変数は取得できないのでしょうか。 mov $Name, 途切れて失礼しました、表示できない文字使ったのかも。 gettag $0 で、ブラケットで囲った$Nameを取得し、名前ウィンドウに表示しようとしても空白になってしまいます。分かる方、どうか返信お願いいたします。 [$Name]をgettag $varで拾うと空文字列になるね >取得し、名前ウィンドウで表示 やるならこんな感じかな *define humanz 200 windowback pretextgosub *pretext_lb numalias Name,800 game ;続く *start setwindow 32,320,28,20,26,26,0,2,20,1,1,#999999,0,300,639,479 inputstr $Name,"名前を入力してください(全角4文字以内)",8,1,240,120,128,30 [仮面のおっさん] 「ふふふ… さらにできるようなったな、$Name!!」 \ [Name] 「親父にもぶたれたことないのにっ!!」 \ [text] 宇宙世紀0079、 人々はみずからの行為に恐怖した…。 \ end *pretext_lb gettag $500 if $500 == "" return if $500 == "text" mov $500,"" if $500 == "Name" mov $500,$Name lsp 10,":s#00FFFF"+$500,64,260 print 1 return 506です、返信気付かずお返事遅れてすみません! >>508 言葉足らずですみませんでした>_< >>509 すごい! 詳細な実例ありがとうございます!! 助かりました! 命令の引数以外に書かれた$0や%0はだいたい中身に自動変換されると思って間違いない 改めてテストしてみたけど [$Name]をgettag $varすると、普通に"$Name"って文字列が帰ってくるね lsp sp,":s#RRBBGG"+"$str",x,yが lsp sp,":s#RRBBGG"+"",x,yと同じスプライト(width=1,heigh=fontの高さ)を生成するみたい >509で空文字列っていうのは勘違いでした。 *define pretextgosub *pre_txt_lb numalias Name,100 game *start mov $Name,"あいうえお" [$Name] end *pre_txt_lb gettag $0 mesbox $0,"tag" if $0 == "$Name" mov $0,$Name mesbox $0,"$var" return LuaアリならNSCall_tag内で変換するといいかもしれんね ろだです アップローダのファイル倉庫にあるアーカイブですが、>>459 問題により差し替えました(中身は一緒) 本スレへのリンクも後ほど更新いたします 長い間ほったらかしにしてしまいすみませんでした また、ご指摘いただいた方々には重ねてお詫びを申し上げます なんかセーブするとsave1.ssっていうファイルが出来てるけどなんなんでしょうか 実態はスクリーンショットbmpみたいだけどスクショ系命令は使ってません >>518 自作のスクリプトの話? このスクリプトで.ssってファイルできる? *define game *start くりっく \ savegame 10 end >>519 自作のスクリプトの話です >>519 で.ssはできなかったから組み方の問題か…… かなり作りこんでるから原因究明に骨が折れそうだ わかった!NSDCopyToBgやbgcopyを使うと.ssが一時作成されて、セーブ時にそれがそのまま残るみたいだ 以下は検証スクリプトなので、まずい所あれば指摘してもらえるとありがたいです *define game *start bgcopy drawfill 255,0,128 draw savegame 1 click end 本当だね。うちの環境でもsave*.ssできました bgcopyで編集したbgを、savegame時にsave*.ssに保存してるみたいだね loadgame時に、save*.ssから読み込んでbgを復元させてるみたい ver2.51からこの仕様になったみたいだね ;1:save*.ssできる *start bgcopy savegame 10 click end ;2:save*.ssできない *start bgcopy click end ;3:save*.ssできない *start bgcopy bg #000000,1 savegame 10 click end ありがとさんくす 仕様なら気にすることないですね これでやっと先に進める…… ろだが繋がらない状態が続いてるみたい? ファイルが入用な方は直接こちらから飛んでください(すみません) http://ux.getuploader.com/nsc_pub/ http://ux.getuploader.com/nsc_arc/ 👀 Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) textfield命令って、$0で取得することしかできないのでしょうか? textfield $0,100,50,320,70,10,20,1 リファレンス通りに以上のように入力すれば機能しますが… textfield $name,100,50,320,70,10,20,1 のように文字列変数を使用したり、 mov $0,$name textfield $0,100,50,320,70,10,20,1 のように代入しておいたりすると機能しません そんな事で使い物になる筈がないので 私がとんでもないみす勘違いをしているのかもしれませんが… どなたか分かる方がいらっしゃったら助言下さるとありがたいです! >>527 一行目 $0で取得することしかできないのでしょうか? 「$0でしか」取得することしかできないのでしょうか? の間違いでしたすみません >>527 もう少し検証したところ、 $0なり$nameなりに全角文字列が入っていると機能しないようです $nameに"name"を代入しておくと機能しました しかしそれを使って"なまえ"と入力するとまた機能しなくなります… そういう仕様なんでしょうか? 今回は諦めてinputを使おうと思いますが、 何か分かる方いらっしゃればコメント下さい…! 長々と一人で失礼しました これで動かない? *define numalias name,100 game *start mov $name,"あいうえお" textfield $name,100,50,320,70,10,20,1 $name click end >>530 返信ありがとうございます! 頂いたスクリプトのみで動かすと機能しました! しかし自分のに組み込むと駄目なので検証してみたところ btndown 1 が機能している事が原因だと判明いたしました! クリックで飛んだ先でtextfield命令があるので、 そのせいでマウスを押し続けている間はテキストフィールドが開いているが 指を離すと消えてしまうという状態になっていました 飛んだ先でbtndown 0を入れてもclickなりを挟まないと解除はできないようなので btndownを諦めるか何かをクリックさせるかで解決できそうです 確実に動くスクリプトを頂いた事で、色々検証できました! 本当にありがとうございました 連投すみません clickさせなくてもprintを挟めば大丈夫でした 解決しました、ありがとうございました! function NSCOM_print() local n=NSPopInt() if(n==1)then NSUpdate() else NSExec('_print '..n) end end NSExec('luasub print') ひょっとしてprint 1ならNSUpdateに投げる的な分岐作った方がluasubなしの_print 1直接呼ぶより僅かに動作早い? print 1よりNSUpdate()の方が速いか?って言う意味なら 有意な差はないんじゃない? --system.lua function NSCOM_invalidate() NSInvalidate(0,0,639,479) end function NSCOM_update() NSUpdate() end ;00.txt *define luasub invalidate luasub update game *start setwindow 8,16,22,23,22,22,0,2,20,1,1,#999999,0,0,639,479 lsp 10,":c;>640,480,#238c82",0,0,128 lsp 11,":c;>640,480,#234d8c",0,0,255 print 1 クリックしてね \ 3回計測しています 時間かかるので、そのままでお待ちください… for %100=1 to 3 mov $0,"*update0" gosub *test mov %10,%0 mov $0,"*update1" gosub *test mov %11,%0 mov $0,"*update2" gosub *test mov %12,%0 %100回目: 画面更新なし :%10 NSUpdate:%11 Print 1 :%12 br next 計測終了です click end *test resettimer for %0=1 to 50 invalidate gosub $0 next gettimer %0 return *update0 return *update1 update return *update2 print 1 return ttps://ux.getuploader.com/nsc_pub/download/8 細かく試してみた。僅かにNSUpdate()呼びの方が軽くはなるみたいだけど… その僅かな差が問題になるほど頻繁に画面更新するスクリプトならそもそもNSLuaとか使った方がよくない? って感想かなあ 👀 Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) setlayerで指定する「レイヤー番号」ってそれ自体はスプライト番号とはまったく別枠なの? lsp 10,"*1" と書いて初めてスプライトと結び付く? 十年以上勘違いしてたぜ…… >setlayerで指定する「レイヤー番号」ってそれ自体はスプライト番号とはまったく別枠なの? Yes レイヤ番号とは、プラグイン(.dll)の登録番号です レイヤプラグインは32個まで登録できます(0-31) >lsp 10,"*1" >と書いて初めてスプライトと結び付く? Yes プラグインのDraw()が呼び出されるようになります たとえば setlayer 1,30,"foo.dll" lsp 10,"*1" とすると NScripterは画面更新時に スプライト10番を描画するタイミングで foo.dllのDraw()を呼び出します foo.dllのDraw()で雪を描いたり、雨を描いたり、動画のフレームを描いたりするわけです 「lsp 10,"test.png",0,0」 のようにイメージを読み込んで表示するのに対して こうしたやり方を「動的に画像を生成する」といいます 最終バージョンのエヌスクリプターで作成したゲームを知人のパソコンで開こうとすると、立ち上がって少しで「動作を停止しました」として落ちてしまうそうです。 自分の環境win7のパソコン二台で試しましたが問題なく進みます。 知人のパソコンは8のようなのですが、ファイルの共有のプロパティに問題があるのではという意見を受け、 手元で確認したところ互換性にチェックを入れる項目がありました。 が、試しに開いた他ソフトのプロパティには存在する「セキュリティ」という項目もそれらしく見えたのですが エヌスクリプターのエンジンのプロパティにはそれが含まれていません。 知人に何度も試してもらうのも申し訳なく、共有の問題が本当に原因なのか、悩んでいます。 グーグルでも「落ちるときは最終バージョンのエンジンを使って」とまでしか言及が見つからず途方に暮れております。 似たような状況に陥った方はいらっしゃらないでしょうか?またこれと思われる原因は他にありますでしょうか? 「Windows 動作を停止しました」でググるとNScripter以外でも検索に引っかかるね Vista以降で極たまに発生することがあるみたい たぶん、Windowsのよく分からん不具合の一つだと思う OSをリカバリーすると改善したっていう書き込み見たけど ちょっと試すのは面倒くさいよね… >>540 自分もwin8.1で、いろんな所のNスク製ゲームやってるけど落ちた事はないよ 一応、互換性は右クリック→互換性のトラブルシューティングで変更できるみたい もう試してたらゴメン >>540 >>541 >>542 配布したゲームのプレイヤーの何人かからWin8以降の環境でゲームを起動したら 上手く動作しなかったという連絡もらったけど その後OSを再起動したら問題なく動いたらしい コーディングが悪いんだろうけどパラメータに応じて分岐する馬鹿みたいな量のif文を書いてしまっているので switch命令欲しい >>544 tablegoto使うかtablegosub作って、switchの代用にするのもありかも tablegosubはNScrでも作れるけど、制御文多用するならLuaの方がやりやすいかも --system.lua NL_dofile("sample.lua") function NSCOM_tablegosub() local t = NSPopStr() NSPopComma() local num = NSPopInt() _G[t][num]() end --sample.lua --パラメーター分岐による処理の中身 --テーブルを用意して、処理を記述していく sample = {} sample[1] = function() NSOkBox("1","sample") end sample[2] = function() NSOkBox("2","sample") end sample[15] = function() NSOkBox("15","sample") end ;00.txt *define luasub tablegosub game *start inputnum %0,"数値を入力して下さい(1,2,15)",160,96,64,24 ;パラメーターによる分岐が一応実現できる ;tablegosub (Luaの)テーブル名,パラメーター tablegosub "sample",%0 end >>543 .541.542 再起動とソフトの入れ直しで解決したようです 手元で現象が確認できずあくまでも「したようだ」とのことなのがもどかしいですが ありがとうございました >>545-546 tablegoto命令の存在を知らなかった… ありがとう!Lua難しそうだけどやっぱり使えないと駄目だなあ 蛇足かもしれんけど、NScrでtablegosub作るとこんな感じになるよ 使い方: tablegosub "*label_",10とすると *label_10にgosubする パラメーターが負の数の場合、正負反転して頭に"M"が付く tablegosub "*label_",-15だと *label_M15にgosubする パラメーターに合致するラベルがない場合、 ラベル+"defalut"にgosubする ;00.txt *define defsub tablegosub game *start inputnum %0,"数値を入力して下さい",160,96,64,24 tablegosub "*sample_",%0 end *tablegosub ;[%0][$0,$1]を使用 getparam $0,%0 if %0>=0 itoa $1,%0 if %0<0 mul %0,-1:itoa $1,%0:mov $1,"M"+$1 mov $1,$0+$1 labelexist %0,$1 if %0==0 mov $1,$0+"default" gosub $1 return ;テーブルの処理 *sample_0 mesbox "0","sample" return *sample_1 mesbox "1","sample" return *sample_2 mesbox "2","sample" return *sample_14 mesbox "14","sample" return *sample_M1;-1 mesbox "-1","sample" return *sample_M2;-2 mesbox "-2","sample" return *sample_M99;-99 mesbox "-99","sample" return *sample_default mesbox "default","sample" return >>549-551 すごく詳しいサンプルありがとうございます これを参考に今日明日がんばってみます 簡単にお金が稼げる方法興味ある人だけ見てください。 グーグル検索⇒『来島のモノノリウエ』 3YM4IMJTW8 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.4.7 2024/03/31 Walang Kapalit ★ | Donguri System Team 5ちゃんねる