我是一名游戏开发人员,在过去的四个版本中使用XNA制作.Net语言的游戏.不幸的是现在有这个消息:http://www.gamasutra.com/view/news/185894/Its_official_XNA_is_dead.php#.UQ3yiehQCh8
我调查的游戏引擎的生态系统,寻找支持在Visual Studio编码的东西(我使用F#重,信不信由你!),我无法找到的东西,是高品质的,还活着,和高性能,以取代XNA.例如,Unity错过了标记,因为它只允许在MonoDevelop中编写脚本,而我希望获得更加开发人员友好的体验.
那么什么是XNA的良好替代品?
通过创建一个或多个awaiters和awaitables,是否可以在C#中构建协同程序?
理想情况下,我希望能够写出如下内容:
void async Click() {
var mouse_position = await left_mouse_click();
await shoot_projectile();
}
Run Code Online (Sandbox Code Playgroud)
然后从Click方法中获取一些我可以在另一个异步方法中等待的东西,或者我可以用一些MoveNext/GetResult方法显式迭代.
最终目标是我需要将C#async/await与F#monadic coroutines集成到一个游戏开发框架(http://casanova.codeplex.com).
这段代码很好编译:
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances,
UndecidableInstances, FlexibleContexts, EmptyDataDecls, ScopedTypeVariables,
TypeOperators, TypeSynonymInstances, TypeFamilies #-}
class Sel a s b where
type Res a s b :: *
instance Sel a s b where
type Res a s b = (s -> (b,s))
instance Sel a s (b->(c,a)) where
type Res a s (b->(c,a)) = (b -> s -> (c,s))
Run Code Online (Sandbox Code Playgroud)
但是只要我添加R谓词ghc失败:
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances,
UndecidableInstances, FlexibleContexts, EmptyDataDecls, ScopedTypeVariables,
TypeOperators, TypeSynonymInstances, TypeFamilies #-}
class Sel a s b where
type …
Run Code Online (Sandbox Code Playgroud) 我正在研究各种编程语言的协同程序和生成器.
我想知道是否有一种更简洁的方法将通过生成器实现的两个协同程序组合在一起,而不是在被调用者产生的情况下向调用者返回?
假设我们使用以下约定:除最后一个之外的所有产量都返回null,而最后一个返回coroutine的结果.因此,例如,我们可以使用一个调用另一个协程的协程:
def A():
# yield until a certain condition is met
yield result
def B():
# do something that may or may not yield
x = bind(A())
# ...
return result
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望通过绑定(可能或可能不可实现,这是问题),协程B在A收益直到A返回其最终结果时产生,然后将其分配给x以允许B继续.
我怀疑实际的代码应该显式迭代A所以:
def B():
# do something that may or may not yield
for x in A(): ()
# ...
return result
Run Code Online (Sandbox Code Playgroud)
这有点丑陋且容易出错......
PS:这是一种游戏,其中语言的用户将是编写脚本的设计者(script = coroutine).每个字符都有一个关联的脚本,并且有许多子脚本由主脚本调用; 例如,考虑到run_ship多次调用reach_closest_enemy,fight_with_closest_enemy,flee_to_allies等等.所有这些子脚本都需要按照上面描述的方式调用; 对于开发人员来说,这不是问题,但对于设计人员而言,他们编写的代码越少越好!
我试图在WPF之外完全使用XAML,特别是在XNA应用程序中.到目前为止,我已经管理(很容易,我很惊讶地承认)从XAML文件中加载我的XNA应用程序中的一些数据.当我决定要为我班级的一个属性设置动画时,问题就开始了......没有任何反应:(
这是我从XAML文件加载的主要类:
[ContentPropertyAttribute("Animation")]
public class Test : FrameworkContentElement
{
public string Text { get; set; }
public Vector2 Position { get; set; }
public Color Color { get; set; }
public Storyboard Animation { get; set; }
public static DependencyProperty RotationProperty =
DependencyProperty.Register("Rotation", typeof(double), typeof(Test), new PropertyMetadata(0.0));
public double Rotation { get { return (double)GetValue(RotationProperty); } set { SetValue(RotationProperty, value); } }
}
Run Code Online (Sandbox Code Playgroud)
这是XAML文件:
<l:Test xmlns:l="clr-namespace:XAMLAndXNA;assembly=XAMLAndXNA"
xmlns:a1="clr-namespace:System.Windows.Media.Animation;assembly=PresentationFramework"
xmlns:a2="clr-namespace:System.Windows.Media.Animation;assembly=PresentationCore"
Text="Testo" Position="55,60" Color="0,255,255,255">
<a1:Storyboard>
<a2:DoubleAnimation a1:Storyboard.TargetProperty="Rotation"
From="0"
To="360"
Duration="00:00:10.0"/>
</a1:Storyboard>
</l:Test>
Run Code Online (Sandbox Code Playgroud)
这是加载和动画启动(尝试): …
我有以下类型类,它模拟类似SQL的查询优化:
class OptimizableQuery q where
type Optimized q :: *
optimize :: q -> Optimized q
instance Query q => OptimizableQuery q where
type Optimized q = q
optimize q = q
instance (Query q, OptimizableQuery q) => OptimizableQuery (Select (Select q p) p) where
type Optimized (Select (Select q p) p) = Select (Optimized q) p
optimize (Select (Select q _) p) = Select (optimize q) p
Run Code Online (Sandbox Code Playgroud)
问题是我在优化类型函数上得到错误"冲突族实例声明".为什么这样,我该如何解决?拥有一个"后备实例"而不是耗尽所有情况(这可能是很多)真的很棒......
我一直在阅读很多关于游戏引擎架构的内容,并且想知道以下内容:当前被认为是游戏引擎的最佳架构是什么?
如果我们能找到一些学术资源(如论文或类似资料)而不是孤立的开发人员的轶事经验,我将非常感激.
谢谢
我刚刚在Windows 8上安装了Xamarin工作室,我创建了一个C#android项目,并尝试编译它没有运气.
我得到的错误是在AAPT工具上,但即使是msbuild的详细输出,我得到的是输出窗口中的以下内容:
Task "Aapt"
Aapt Task
AssetDirectory:
ManifestFile: C:\Users\Giuseppe\AppData\Local\Temp\i4va1gur.y4b\AndroidManifest.xml
ResourceDirectory: obj\Debug\res\
JavaDesignerOutputDirectory: C:\Users\Giuseppe\AppData\Local\Temp\i4va1gur.y4b
PackageName: AndroidLocationLogger.AndroidLocationLogger
UncompressedFileExtensions:
ExtraPackages:
AdditionalResourceDirectories:
LibraryProjectJarsWildcard: obj\Debug\__library_projects__\*.jar
ExtraArgs:
C:\Users\Giuseppe\AppData\Local\Android\android-sdk\platform-tools\aapt.exe package -f -m -M C:\Users\Giuseppe\AppData\Local\Temp\i4va1gur.y4b\AndroidManifest.xml -J C:\Users\Giuseppe\AppData\Local\Temp\i4va1gur.y4b --custom-package androidlocationlogger.androidlocationlogger -F C:\Users\Giuseppe\AppData\Local\Temp\i4va1gur.y4b\resources.apk.bk -S obj\Debug\res -I C:\Users\Giuseppe\AppData\Local\Android\android-sdk\platforms\android-8\android.jar --auto-add-overlay
C:\Program Files\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(707,2): error MSB6006: "aapt.exe" exited with code -1073741816.
Done executing task "Aapt" -- FAILED.
Done building target "_UpdateAndroidResgen" in project "AndroidLocationLogger.csproj" -- FAILED.
Run Code Online (Sandbox Code Playgroud)
我真的不知道如何调试这个,因为它给我的数据很少......
我试图在F#中模拟一个类型类的系统; 我想创建配对打印机,它自动实例化对打印功能的正确系列调用.我最近的尝试粘贴在这里,因为F#无法确定正确的过载并立即放弃,因此失败了:
type PrintableInt(x:int) =
member this.Print() = printfn "%d" x
let (!) x = PrintableInt(x)
type Printer() =
static member inline Print< ^a when ^a : (member Print : Unit -> Unit)>(x : ^a) =
(^a : (member Print : Unit -> Unit) x)
static member inline Print((x,y) : 'a * 'b) =
Printer.Print(x)
Printer.Print(y)
let x = (!1,!2),(!3,!4)
Printer.Print(x)
Run Code Online (Sandbox Code Playgroud)
有没有办法这样做?我在游戏开发的环境中这样做,所以我无法负担反射,重新输入和动态转换的运行时开销:要么我通过内联静态地执行此操作,要么我根本不执行此操作:(