我正在XNA上开展一款休闲游戏,目的是部署到Xbox 360.我将无法访问硬件几周而且我的时间紧迫,所以我想测试一下一些东西 - Boo和一些自定义库 - 将在360上正常工作.如果他们不这样做,我需要尽早解决它们,所以测试这一点非常重要.
有了解释,有没有一种方法可以进入"模拟器",在实际部署到360之前在.NET Compact Framework for 360上运行代码?
我正在为一个我正在研究的可扩展卡片游戏引擎创建一个DSL,用boo.
我有一个卡宏,它为新类型的卡创建一个类,并在构造函数中初始化一些属性.该宏有一些用于设置其他内容的子宏.基本上我想让它变成这样的东西:
card 'A new card':
type TypeA
ability EffectA:
// effect definition
Run Code Online (Sandbox Code Playgroud)
进入这个:
class ANewCard (Card):
def constructor():
Name = "A new card"
Type = Types.TypeA
AddEffect(EffectA())
class EffectA (Effect):
// effectdefintion
Run Code Online (Sandbox Code Playgroud)
效果肯定需要是一个类,因为它将被传递(它是一个战略模式).
到目前为止,我有这个简单的骨架:
macro card:
yield [|
class $(ReferenceExpression(card.Arguments[0])) (Card):
def constructor():
Name = $(card.Arguments[0])
|]
Run Code Online (Sandbox Code Playgroud)
现在,我不知道我应该怎么做card.Body使能力宏添加代码到构造函数,同时还生成一个嵌套类.有什么想法吗?这可以用当前的语言功能完成吗?
Boo看起来像一个很酷的语言.是100%C#兼容吗?我的意思是:我可以使用任何C#DLL /类吗?我可以使用XNA框架吗?
我有兴趣了解Boo更强大的功能,如语法宏,解析器支持(Ometa?),编译器管道等.我的印象是这些领域一直在变化,有些记录不足.除了研究源代码之外,还有什么好的资源可以学习这些东西吗?
我在管理ASP.Net应用程序的配置时遇到了困难,无法为不同的客户端部署.需要花费大量不同设置需要花费大量时间,而且当前的配置方法过于复杂,无法使我们将此责任推给支持合作伙伴.
有没有更好的方法来处理这个或好的研究信息来源的建议?
我们目前的工作方式:
我们遇到的具体问题:
我们目前关于如何处理这个问题的想法是:
我从使用Unity3d的游戏开发开始,我可以看到有3种支持的语言用于创建脚本:C#,unityscript和Boo ......
虽然,从网页设计过去我显然使用javascript,但经过几次尝试后,我注意到Unity3d并没有完全支持脚本语言和一些元素new Date().valueOf(),如属性arguments和方法中的一些其他语句,如属性和许多其他人将无法正常工作,似乎我的文件不能有一个包装方法,包含所有其他方法,如:
(function (scope) {
function Start() {
...
}
...
}(this));
Run Code Online (Sandbox Code Playgroud)
当使用new Date().valueOf()JS中有效的东西时,我得到:
MissingMethodException:找不到方法:'System.DateTime.valueOf'.Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher()
那么编译器可能会将最初的"unityscript"代码转换为Boo语言?所以也许Boo是正确的"原生"选择,也许unityscript本身不是开发unity3d应用程序时的最佳方式?
我正在考虑一种语言,它完全支持所有已知的本机类和方法,它们可以正常工作吗?
很抱歉上面提到的任何错误,请告诉我您的想法.
在我坚持使用对象数据库的实例的类中,我不得不这样做:
private string _name;
public string Name
{
get { return this._name; }
set { _name = value; this.Save(); }
}
Run Code Online (Sandbox Code Playgroud)
而我宁愿输入这个:
[PersistedProperty(Name)]
private string _name;
Run Code Online (Sandbox Code Playgroud)
其中PersistedProperty属性生成一个Getter和Setter,就像默认的[Property()]属性一样,除了我想在生成的Setter中添加一行代码.
有没有办法可以创建一个属性来做到这一点?希望,它适用于Intellisense.
默认的[Property()]属性是如何做的呢?如果我看到代码,我可以嫁接......
注意:我实际上是在Boo中这样做,但是我认为我会给c#代码,因为更多的人可能愿意回答这个问题,但是,如果有一个Boo特定的解决方案,我全都耳朵!
更新:
我的目标只是减少打字和杂乱.事实证明,最简单的方法是使用一个脚本,该脚本根据我的类中的标记生成部分类.
从标记(与部分类一起)自动生成源代码很容易,实际上看起来像是一种非常有前途的方法来解决我们通常尝试使用继承和泛型类型解决的一些问题.
采用这个简单的C#LINQ查询,并想象这db.Numbers是一个包含一列的SQL表Number:
var result =
from n in db.Numbers
where n.Number < 5
select n.Number;
Run Code Online (Sandbox Code Playgroud)
这将在C#中非常有效地运行,因为它会生成类似的SQL查询
select Number from Numbers where Number < 5
Run Code Online (Sandbox Code Playgroud)
它没有做的是从数据库中选择所有数字,然后在C#中过滤它们,因为它可能在最初时看起来像.
Python支持类似的语法:
result = [n.Number for n in Numbers if n.Number < 5]
Run Code Online (Sandbox Code Playgroud)
但是这里的if子句在客户端而不是服务器端进行过滤,效率低得多.
在Python中有没有像LINQ一样高效的东西?(我目前正在评估Python与IronPython和Boo的比较,因此可以使用任何一种语言的答案都可以.)
Ruby有method_missing,Ruby 有getattr.Boo是否提供了我可以用来拦截方法调用的东西?
我似乎无法弄清楚如何将'when'关键字添加到BOO,它应该表现为'if'.我想我可以制作一个方法,但是我不能像我一样用它来移动.任何指针将不胜感激.
-标记
boo ×10
.net ×4
c# ×4
attributes ×1
intercept ×1
ironpython ×1
linq ×1
linq-to-sql ×1
macros ×1
python ×1
testing ×1
unityscript ×1
xbox360 ×1
xna ×1