我对TypeScript感到非常兴奋,所以我开始玩它.作为一个Actionscript开发人员,它使Javascript变得不那么难了.
但是,在Actionscript中,可以使用is运算符在运行时检查类型:
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true
Run Code Online (Sandbox Code Playgroud)
是否可以检测变量(extends或)是否是TypeScript的某个类或接口?我在语言规范中找不到任何关于它的东西,在使用类/接口时它应该存在.
对于客户,我开发了一个用于用户界面的iOS + Android
应用程序Cordova (PhoneGap)
.现在,作为这个应用程序的更新,我正在尝试添加一个用Haxe编写的游戏.最初这个游戏是为这个游戏编写的Flash target
,但是我已经更新了它以便与C++
目标一起工作Android and iOS
.
在Android上,很容易Cordova
使用活动将其与应用程序集成(Haxe部分作为单独的活动运行),但我在iOS上实现类似结果时遇到一些麻烦.
到目前为止,我已经尝试将所有hxcpp
生成的代码包含在我的项目中(就像当你执行"nme build ios"时NME设置XCode项目一样),hxRunLibrary()
当我希望游戏运行时,我正在调用我的代码.
问题是hxRunLibrary()
似乎想要创建自己的UIApplication
实例,由于我的主应用程序已经在运行实例,因此失败并出现以下错误:
*** Assertion failure in void UIApplicationInstantiateSingleton(Class)(), /SourceCache/UIKit_Sim/UIKit-2380.17/UIApplication.m:2037
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'
Run Code Online (Sandbox Code Playgroud)
我认为这可能与SDL有关,Haxe将其用于图形.根据我的理解,SDL需要从应用程序的主要功能运行,这与Cocoa产生冲突,也需要从main函数运行.
这有什么简单的方法吗?我查看了hxcpp源代码,但无法找到UIApplication
相关代码或SDL的任何条目代码.
也许有人可以指出我正确的方向.谢谢!
我最近又重新看了一眼Haxe,并意识到我以前忽略了它的一些优雅.但我想它仍然缺乏开发人员的可见性.
所以我的问题是,这里有人用它来制作吗?如果是这样,你如何使用它?你遇到的问题或困难是什么?你推荐它用于未来的项目吗?
我经常看到人们using
在他们的Haxe代码中使用关键字.它似乎追随了这些import
陈述.
例如,我发现这是一个代码片段:
import haxe.macro.Context;
import haxe.macro.Expr;
import haxe.macro.Type;
using haxe.macro.Tools;
using Lambda;
Run Code Online (Sandbox Code Playgroud)
它做什么以及如何工作?
我想创建一个为我生成此代码的宏:
if (myEntity.get(Attack) == null) myEntity.add(new Attack());
if (myEntity.get(Confused) == null) myEntity.add(new Confused());
if (myEntity.get(Defend) == null) myEntity.add(new Defend());
if (myEntity.get(Offense) == null) myEntity.add(new Offense());
Run Code Online (Sandbox Code Playgroud)
在代码中,我想像这样声明/使用它:
EntityMacroUtils.addComponents(myEntity, Attack, Confused, Defend, Offense);
Run Code Online (Sandbox Code Playgroud)
当前的宏函数如下所示:
macro public static function addComponents(entity:ExprOf<Entity>, components:Array<ExprOf<Class<Component>>>):Expr
{
var exprs:Array<Expr> = [];
for (componentClass in components)
{
var instance = macro $e { new $componentClass() }; // problem is here
var expr = macro if ($entity.get($componentClass) == null) $entity.add(instance);
exprs.push(expr);
}
return macro $b{ exprs };
}
Run Code Online (Sandbox Code Playgroud)
这个宏函数不正确,我收到错误:
EntityMacroUtils.hx:17:字符 …
我知道Haxe编译器是用OCaml编程语言编写的,这对于编译器开发人员来说是一个很好的选择。然而最近我发现了 Luaxe 项目,它似乎是 Haxe 的全功能 Lua 后端,并且是作为纯 Haxe 库开发的。我查看了该项目的代码,它使用某种宏魔法在编译时生成 Lua 源代码。所以我想问是否有可能在不深入OCaml并重建编译器的情况下用纯Haxe实现一个全功能的后端?如果可以的话有什么限制吗?有没有关于如何在纯 Haxe 中实现后端的好文章?
Haxe检查版本号时条件编译的确切语法是什么?
根据haxe --help-defines
haxedef为haxe编译器版本是"haxe-ver",我假设在代码中变成"haxe_ver".
所以我想检查版本号是否至少为3.2.0.我最初尝试过:
#if (haxe_ver >= 3.2.0)
但这似乎不起作用.然后我尝试了:
#if !haxe_ver < 3.2.0
这似乎是编译,但我想确定.
我是Haxe的新手,可能这是一个非常基本的问题,我无法真正找到答案.
我看到三种调用主类的方法:
1)使用main()
//Entry point
public static main():void{
//do something...
}
Run Code Online (Sandbox Code Playgroud)
2)使用构造函数new()
//Constructor
public function new(){
// init
}
Run Code Online (Sandbox Code Playgroud)
3)同时使用main()和new()
static function main()
{
Lib.window.onload = function(e) new Main();
}
public function new()
{
//init
}
Run Code Online (Sandbox Code Playgroud)
是否有使用指南或最佳实践?
谢谢
我正在尝试为我的haxe库创建一些命令,但我遇到了问题.实际上,我想在haxelib run <mylib> <command>
发送命令的目录中生成一些文件和目录.
但是,当它运行时,它会在我的lib目录中生成数据(run.n所在的位置).我的路径如下:
Sys.getCwd() + "/myfile.txt"
Run Code Online (Sandbox Code Playgroud)
我也试过了
"myfile.txt"
Run Code Online (Sandbox Code Playgroud)
总是一样的.也许那是因为我安装了我的图书馆haxelib git
?
flixel-tools有一个命令可以生成一些东西,但是直接用它flixel tpl -n 'name'
.他们不使用haxelib run flixel
.这就是为什么它适合他们?
谢谢你,如果你有一个想法.
我想获得声明的类型我的号码,但我不知道如何获得它们.所以我用可能的检测方法编写了一个测试:
logNumber(Number(3.5), "Number");
logNumber(Number(3), "Number");
logNumber(Number(-3), "Number");
logNumber(uint(3), "uint")
logNumber(int(3), "int")
logNumber(int(-3), "int")
function logNumber(value:*, expected:String):void
{
trace("\n\n\n ");
trace("** Input value: " + value + "\n** Expected: " + expected + "\n")
trace("getQualifiedClassName: ", getQualifiedClassName(value) + check(getQualifiedClassName(value), expected));
switch (value)
{
case value as uint:
{
trace('as: uint' + check('uint', expected));
break;
}
case value as int:
{
trace('as: int' + check('int', expected));
break;
}
case value as Number:
{
trace('as: Number' + check('Number', expected));
break;
}
}
if(value …
Run Code Online (Sandbox Code Playgroud) 我有这个设置,只是为了找到一个元素的index(),但它应该查看具有相同节点名的相同级别的元素.
返回的数字不符合预期.查看代码注释.我想filterByNodeNameIndex为'2'.
希望这个示例代码足够清晰:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>TestDrive</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" >
function TestDrive()
{
var $obj = $("#div2");
console.log("$obj.length:" + $obj.length); // returns: 1
var $filtered = $obj.parent().children($obj[0].nodeName); // find all divs in same parent
console.log("$filtered.length:" + $filtered.length); // returns: 3
var $obj_clone = $filtered.find($obj); // find original element again. Is something wrong here?
console.log("$objAgain.length:" + $obj_clone.length); // returns: 0
var filteredByNodeNameIndex = $obj_clone.index(); // i …
Run Code Online (Sandbox Code Playgroud) haxe ×8
actionscript ×1
constructor ×1
flash ×1
haxelib ×1
hxcpp ×1
indexing ×1
ios ×1
jquery ×1
macros ×1
nme ×1
nodename ×1
numbers ×1
traversal ×1
typechecking ×1
types ×1
typescript ×1
using ×1