2016-05-06 6 views
0

だから、私は現在Unitale-Engine用のLua-スクリプトを作成する必要がありますプログラムに取り組んでいます。私はあなたがそれをクリックすると、新しいプロジェクトファイルを作成する必要があります "新しいプロジェクト"ボタンを追加しました。このファイルにデフォルトのproject-file-textが含まれているようにします。だから私はこれをした:文字列は「false」にその値を設定します

Dim File1 As String = "monster{" & vbNewLine & "COMMENTS=Ribbit, ribbit.;Croak, croak.;Hop, hop.;Meow." & vbNewLine & "COMMANDS=Compliment;Threaten" & vbNewLine & "DEFAULT_SPRITE=None" & vbNewLine & "NAME=Froggit" & vbNewLine & "HP=10" & vbNewLine & "ATK=1" & vbNewLine = "DEF=0" & vbNewLine & "CHECK_MESSAGE=Life is difficult for this enemy." & vbNewLine & "HandleAttack=" & vbNewLine & "OnDeath=" & vbNewLine & "HandleCustomCommand=" & vbNewLine & "}" 
Dim File2 As String = vbNewLine & "encounter{" & vbNewLine & "DEFAULT_MUSIC=Fight" & vbNewLine & "ENCOUNTER_TEXT=Froggit hops close." & vbNewLine & "NEXTWAVES=1" & vbNewLine & "WAVETIMER=6" & vbNewLine & "ARENASIZE=155;130" & vbNewLine & "ENEMIES=Froggit" & vbNewLine & "ENEMYPOSITIONS=0;0" & "EncounterStarting=" & vbNewLine & "EnemyDialogueStarting=" & vbNewLine & "EnemyDialogueEnding=" & vbNewLine & "DefenseEnding=" & vbNewLine & "HandleItem=" & vbNewLine & "HandleSpare=" & vbNewLine & "EnteringState=" & vbNewLine & "Update=" & vbNewLine & "}" 
Dim File3 As String = vbNewLine & "waves{" & vbNewLine & "1=Do Nothing" & vbNewLine & "}" & vbNewLine & "end" 
My.Computer.FileSystem.WriteAllText(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\UnitaleMaker\Projects\" & PJNBox.Text & ".umproj", File1 & File2 & File3, False) 

はい、それはテキストです。問題は、それが宣言されたときFile1は常に"False"にその値を設定していること、です。ストリングが長すぎるので、私はそれが3つに分割されていると思っていましたが、動作しません。

すべてのヘルプはapprechiatedされます!

〜ミカ// OneByte_

+3

中間に '=&'があります( '...&vbNewLine =" DEF = 0 "&...')。 – GSerg

+0

どうしたのですか?私はそれを複数回見ました...何でも、ありがとう!それが問題でした。 –

答えて

1

VB 14 (Visual Studio 2015)からは、複数の行にまたがる文字列リバースを含めることができます。 VB 14では、文字列の補間も追加されているため、より洗練されたコードになります。あなたは& vbNewLine = "DEF=0" &のあなたのミスを犯したからあなたを守っているだろうし、全体的な読みのコードをより簡単になり、次のようなコードを書くことができます。

また、"ENEMYPOSITIONS=0;0" & "EncounterStarting="で改行を忘れていて、{}の部分をインデントしていると仮定しています。あなたが質問でそれらを解散述べたので、私は、私はあなたではなく1つの文字列でそれをすべて持っているだろうと想定、単一の文字列に戻っFile1File2、およびFile3を組み合わせます。

Dim File1 As String = "monster{ 
    COMMENTS = Ribbit, ribbit.;Croak, croak.;Hop, hop.;Meow. 
    COMMANDS=Compliment;Threaten 
    DEFAULT_SPRITE=None 
    NAME=Froggit 
    HP=10 
    ATK=1 
    DEF=0 
    CHECK_MESSAGE=Life Is difficult For this enemy. 
    HandleAttack= 
    OnDeath= 
    HandleCustomCommand= 
} 
encounter{ 
    DEFAULT_MUSIC = Fight 
    ENCOUNTER_TEXT =Froggit hops close. 
    NEXTWAVES=1 
    WAVETIMER=6 
    ARENASIZE=155;130 
    ENEMIES=Froggit 
    ENEMYPOSITIONS=0;0 
    EncounterStarting= 
    EnemyDialogueStarting= 
    EnemyDialogueEnding= 
    DefenseEnding= 
    HandleItem= 
    HandleSpare= 
    EnteringState= 
    Update= 
} 
waves{ 
    1 =Do Nothing 
} 
End" 
My.Computer.FileSystem.WriteAllText($"{My.Computer.FileSystem.SpecialDirectories.MyDocuments}\UnitaleMaker\Projects\{PJNBox.Text}.umproj", File1, False) 
0

string.formatを使用することを学ぶしてください。

はまた、私はfile2new line&を変更:

"ENEMYPOSITIONS=0;0" & "EncounterStarting=" 

私はちょうどあなたがそこに新しい行を追加するのを忘れ仮定しました。それは普遍的であるよう

のalsS Environment.NewLineは、新しい行のための最善の選択肢です。

Dim File1 As String = String.Format("monster{{{0}COMMENTS=Ribbit, ribbit.;Croak, croak.;Hop, hop.;Meow.{0}COMMANDS=Compliment;Threaten{0}DEFAULT_SPRITE=None{0}NAME=Froggit{0}HP=10{0}ATK=1{0}DEF=0{0}CHECK_MESSAGE=Life is difficult for this enemy.{0}HandleAttack={0}OnDeath={0}HandleCustomCommand={0}}}", Environment.NewLine) 
    Dim File2 As String = String.Format("{0}encounter{{{0}DEFAULT_MUSIC=Fight{0}ENCOUNTER_TEXT=Froggit hops close.{0}NEXTWAVES=1{0}WAVETIMER=6{0}ARENASIZE=155;130{0}ENEMIES=Froggit{0}ENEMYPOSITIONS=0;0{0}EncounterStarting={0}EnemyDialogueStarting={0}EnemyDialogueEnding={0}DefenseEnding={0}HandleItem={0}HandleSpare={0}EnteringState={0}Update={0}}}", Environment.NewLine) 
    Dim File3 As String = String.Format("{0}waves{{{0}1=Do Nothing{0}}}{0}end", Environment.NewLine) 
    My.Computer.FileSystem.WriteAllText(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\UnitaleMaker\Projects\" & PJNBox.Text & ".umproj", File1 & File2 & File3, False) 
+0

'string.format'を使って、新しい行を大量に挿入する方が良いと言えるでしょう。これらはコンパイル時に知られている文字列リテラルであり、コンパイラはそれらをすべて後で処理する必要のない単一の文字列にマージすることができます。 'Environment.NewLine'は環境に応じて異なる値を持つことができるのに対して、' vbNewLine'は常に '\ r \ n 'に等しいので、' Environment.NewLine'を使うべきであることは間違いありません。データをファイルに永続化するときは区切り記号です。 – GSerg

+0

あなたが言ったように 'Environment.NewLine'は異なる環境で異なる値を持ちますが、常に新しい行を意味します。それがポイントです。 'string.format'を使用する理由は、スペースを節約し、オペラの質問で誤っている可能性が高い'& 'を使用して文字列を接続する必要がないため、より読みやすいコードを持つためです。 – Claudius

+0

'Environment.NewLine'が' \ r'のときにファイルを保存します。 'Environment.NewLine'が' \ n'に等しいときにそのファイルを読み返します。ブーム。 String.formatは、エスケープしなければならなかったすべての '{'のためにこの特別な場合の可読性の例でもなく、エラーが発生しやすくなります。 – GSerg

関連する問題