我正在深入研究iPhone上的OpenGL ES,我对OpenGL ES和Flash仍然没什么大不了的。
关于Flash我只知道它能够制作非常好的动画和过渡。最好的例子,让我们来看看iPhone的Ocarina长笛。这个应用程序制作了一些简单但功能强大的动画。它扩大了小圈子,变得越来越大。虽然他们这样做,但他们有径向渐变和改变alpha。
那是我所说的酷炫动画片。
现在,无论是在Flash还是OpenGL ES中,都可以通过某种代码连接某些“对象”,例如圆圈或任何类型的代码,因此触摸圆圈会启动另一个动画。
根据我的理解,当从表面上看时,两件事情几乎完全相同。也许有人可以指出内部的差异。即,Flash开发人员是否必须学习全新的思维和工作方式,或者这两种技术有许多共同之处?
首先,iPhone上没有闪存播放器...所以是的,这不是一个真正的选择...但是有一个类似的闪光灯...看看this post ......并且在Haxe ......
简而言之:Haxe是一种开源语言,允许定位Flash Player 6-10,PHP,JavaScript,neko VM和C ++(更多目标即将发布)...... Haxe / cpp编译器后端的创建者使用它来开启iPhone ......事实上,他已经编写了一个库,允许你在C ++上使用flash9 API或者在openGL上使用neko(neash?nme?不记得哪个是...:D).. 。
这允许你使用flash 9 api为iPhone编写Haxe ... Haxe与actionscript略有不同,但是你很快就能掌握它...
目前,一个限制是,他的库使用软件渲染或Open GL用于图形,这就是为什么他必须在iPhone上使用软件渲染(这不是一个真正的选择)......但它对于开发来说是公平的,我认为希望他很快就会有Open GL ES集成......
所以也许这是一种方式......
但正如您的活动标签所示,您从未真正处理过actionscript或flash,所以我不确定,如果使用足够的Cocoa框架来完成您的工作并不简单...使用Haxe和flash有一个优势API:我认为它比相关的Cocoa框架容易得多(我的一个朋友,他是一个mac开发人员,从iPhone开始,所以我有一个肤浅的洞察力,但它有点令人震惊,他有多少起床和经过2天的工作后运行)...闪存API更高级别,因此更简单,但也有限,可能不是高性能...但你会很快得到结果...但性能在iPhone上很重要,因为这意味着用电......
这是一个完整的Haxe程序,它完成了ocarina所做的几乎所有的循环:
package;
import flash.display.DisplayObject;
import flash.display.GradientType;
import flash.display.LineScaleMode;
import flash.display.Shape;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.Matrix;
import flash.Lib;
class Main {
static function main() {
for (i in 0...(Std.random(5) + 5)) {
var s = genCircle();
Lib.current.addChild(s);
pulsate(s, Std.random(10) + 10);
}
}
static function genCircle():Shape {
var radius = Std.random(50) + 50;
var s = new Shape();
var color = 0x110000 * Std.random(8) + 0x001100 * Std.random(8) + 0x000011 * Std.random(8) + 0x7F7F7F;
s.graphics.lineStyle(5, color,1,false, LineScaleMode.NONE);
if (Std.random(2) == 1)
s.filters = [new BlurFilter(4, 4, 3)];
else {
var m = new Matrix();
m.createGradientBox(radius, radius, 0, -radius/2, -radius/2);
s.graphics.beginGradientFill(GradientType.RADIAL, [color, color], [1,0.5], [0, 0xFF], m);
}
s.graphics.drawCircle(0, 0, radius);
s.x = 50 + Std.random(300);
s.y = 50 + Std.random(300);
return s;
}
static function pulsate(d:DisplayObject, speedModifier:Float):Void {
var cter = Std.int(Std.random(Std.int(speedModifier)));
d.addEventListener(Event.ENTER_FRAME, function (e:Event):Void {
var x = Math.sin(cter++ / speedModifier)/2 + 0.5;
d.scaleX = d.scaleY = x + 0.5;
d.alpha = 1.2 - x;
});
}
}
在未来,我还有一点......剩下要做的就是使用Open GL ES,如上所述,并且,更为棘手的是,让Haxe绑定到iPhone生成的所有输入(加速,多点触控) )...
好吧,你可能想要关注它,如果这条道路对你来说很有趣......或者甚至,作为一个与iPhone合作的人,你甚至可能想要为Haxe-> C ++ - > iPhone解决方案做出贡献。 ..;)
希望有帮助......或至少它有趣...... :)
在OpenGL中,没有“对象”和“渐变”的概念以及闪存提供的所有好东西。 OpenGL只知道顶点,法线,颜色,矩阵等......这些东西结合起来,加上很多编程可以做出惊人的事情,但它不会像使用Flash一样容易。请记住,iPhone上还没有(好的)Flash播放器。
OpenGL是一种比使用Flash开发时通常使用的低级API。你可以用它做很多事情,但要么你必须自己构建更高级别的抽象,要么使用一些现有的库。
如果你来自Flash世界,我认为你大多需要2D抽象,比如Layers等.Cocos 2D for iPhone是一个很棒的库,有很多很酷的东西已经内置。你可以从here得到它