私と何人かの友人は Java で MORPG を書いています。クエストを作成します。
Java でのスクリプト作成の経験はありません。私たちは Python を使用したことがありますが、Python の経験はほとんどありません。私たちの 1 人も Javascript を使用しています。
どのスクリプト言語を使用する必要がありますか? 使用してはいけないスクリプト言語は?
私と何人かの友人は Java で MORPG を書いています。クエストを作成します。
Java でのスクリプト作成の経験はありません。私たちは Python を使用したことがありますが、Python の経験はほとんどありません。私たちの 1 人も Javascript を使用しています。
どのスクリプト言語を使用する必要がありますか? 使用してはいけないスクリプト言語は?
私はかなり大規模なハイブリッドJava/Jythonシステムを担当しています。コアAPI開発にJavaを使用してから、Jythonを使用してJavaオブジェクトを相互に接続します。これは、アドホックデータ分析スクリプトをすばやくまとめることができる必要がある科学計算環境にあります。
今日、このシステムを最初から始めていたとしたら、スクリプト言語としてJythonを選択することはありませんでした。私はPythonが好きですが、Python型システムとJava型システムの間で厄介な不一致が頻繁に発生します。たとえば、ハッシュテーブルだけが必要な場合は、PythonディクショナリまたはJavaHashMapを使用する必要がありますか?Pythonコードでローカルにデータ構造を使用しているのか、Javaの境界を越えてデータ構造を渡しているのかによって、決定が異なる場合があります。Jythonはあなたのためにある程度の型強制を行いますが、それは完璧ではありません。そもそもスクリプト言語を使用する目的が生産性の向上である場合、このような問題について考える必要があるのは面倒です。
JavaScriptやJRubyでも同様の問題があると思います。今日は、JVMを特に対象とし、Java型システムを活用するスクリプト言語を選択します。明らかな候補はGroovyとBeanshellです。Groovyは最近勢いを増しているようですので、私はそれを最も詳しく見ていきます。
Viktor の Jython の提案に同意します。それとJavaScript(あなたが言及し、javax.script
パッケージを介してJava 6+に組み込まれています)以外に、GroovyとJRubyも検討する価値があります。
ところで、これも Java で記述され、スクリプトに Jython を使用する MMORPGであるWyvernを見てください。その作者であるSteve Yeggeは、時々それについて多くのことを述べています。:-)
ジトンはどうですか?
http://www.jython.org/Project/
独自の特殊なスクリプト言語を作成するのはどうですか? アプリが Java で作成されている場合は、ANTLR ( http://www.antlr.org/ ) を使用して言語解析コードを作成できます。
私がこれを言う理由は、汎用のスクリプト言語があまりにも強力な機能を提供する可能性があるためです (スクリプトはクエストのみに使用されると思われるため)。
しかし、独自の言語を作成するのが難しすぎる場合は、上記の提案のいずれかが機能します。ゲームのランタイムをスクリプトにバインドする方法を理解する必要があります。また、多くのゲームで使用されるもう 1 つの選択肢として、Lua ( http://www.lua.org/ ) をお勧めします。
スクリプト言語を使用しないでください。代わりに、構成可能性に焦点を当てます (これは、プログラマーでなくてもうまくできることです)。
スクリプト言語を持つことを支持するよく使われる議論の 1 つは、スクリプト言語を使用することで、プログラマーのレベルが低くても、より簡単なタスクを実行できるというものです。これを信じないでください。簡単なタスクは実際のプログラマーによってすぐに達成されるため、時間を節約することはできません。スクリプティングではなく構成可能性を目指すと、複雑なアルゴリズムや概念が無能なゲーム デザイナーの手に渡ってしまうリスクが大幅に低くなります。:)
ホットスワップ (エディット コンティニュ) の欠如は、MMOG にスクリプト言語を実装する理由 (小さなコード変更のためにゲーム全体をリロードしたくない) でしたが、ホットスワップが組み込まれた Java を使用していました。 、スクリプト言語を上に追加する理由は本当にありません。
私はこれらの質問について何年も考えてきました。その日、MMOG 用の完全なスクリプト言語、IDE、VM、デバッガーなどを自分で実装しました。それ以来、私は賢くなりました。
もしあなたが、引き返せない無限にくだらない道を行くことを選択した場合は、次のことを心に留めておいてください.
今日まで、状況を改善した (より保守しやすい製品を入手した) DSL を見たことがありません。私自身、インディー ゲーム エンジンに Python を統合しましたが、最終的に自分の感覚に達し、それを取り去りました。「スタックレス Python」は、「メンテナンスは難しいが速い」という言い方にすぎません。私が間違っていたら、誰かが私を訂正してください。
LuaJは、LuaをJavaに埋め込むための優れた方法のようです。
この目的のためにJavascriptをお勧めする必要があります。Mozilla Rhino http://www.mozilla.org/rhino/は、ニーズに完全に適合する優れた実装です。
慣れているので、JythonやJRubyよりもJavascriptをお勧めします。些細なJavascriptは、誰でも使用できる非常に馴染みのある構文に従います。ただし、誰かがもっと激しいことをしたい場合、Javascriptは非常に強力な関数型プログラミング言語です。
私は定期的にGroovyとRubyを専門的に使用しており、Javaの記述が面倒な、特に複雑なロジックを使用してアプリケーションの一部を記述するのに最適であると考えています。Javascriptは、ゲームで使用する組み込みの一般的なスクリプト言語としてはるかに優れた選択肢です。私はPythonを使用していませんが、構文的にはRubyに似ており、目的も似ていると思います。
かなりの数のオプションがあります:
おそらく BeanShell ( http://www.beanshell.org/ )
私自身は Python のファンなので、Jython をお勧めしますが、おそらくすべて妥当なオプションです。
私は Python/Jython の大ファンです。構文がきれいなので、Python の経験がある場合に適しているかもしれません。
それ以外の場合、Groovy は Java 構文に基づいており、ほとんどの開発者が Java を使用している場合は学習曲線がより簡単になる可能性があります。また、Java 言語やライブラリとの連携がより緊密になるという利点もあります。
Beanshell は、単純なスクリプト作成を念頭に置いている場合に適しています。クラスはサポートされていません。ただし、ここ数年はサポートがなかったと思います (JSR がそれを台無しにしたようです...)。サポートが重要な場合は、おそらく悪い選択です。