wodesign

wodesign mydesign         
 
wodesign @ 2007-03-14 21:17

刚刚推出的 Flex 2 系列产品为构建和部署富 Internet 应用提供了新一代工具和服务。正如 David Wadhwani 在 Flex 2 系列产品简介中所说明的一样,它包含以下技术:

  • Macromedia Flex Framework 2
  • Macromedia Flex Builder 2
  • Macromedia Flex Charting Components 2
  • Macromedia Flex Enterprise Services 2

对于我们-ColdFusion 开发者来说,这实际上意味着什么?

ColdFusion 和 RIA 体验

首先,我们需要了解一些观点。ColdFusion 开发者对富 Internet 应用应该不会感到陌生。我们已经体验到了 RIA 的能力,迄今为止也能够充分利用它们,只是在复杂性和取得的成绩上有所不同。

  • ColdFusion 5 包括一个工具套件,它使得用 ColdFusion 生成的输出嵌入 Flash 窗口组件更容易。
  • ColdFusion 自 ColdFusion MX 版本就包含 Flash Remoting,它能够使开发者通过充分利用后端的 ColdFusion (包括 ColdFusion 组件 (CFC)),在 Flash 中构建富客户端。
  • 自最初发布以来,Flex 已经能够渲染与 ColdFusion 后端连接的复杂 Flash 用户界面。
  • 目前发售的产品 ColdFusion MX 7 就包括 Flex 技术的子集,它允许创建基于 Flash 的富表单(与富应用相对)。

在过去几年中,许多 ColdFusion 开发者利用这一功能,来协调 ColdFusion 在服务器端的生产率与在客户端 Flash 的丰富交互,从而在两个方面均达到最佳。

然而,这个过程确实是非常重要的。作为 ColdFusion 开发者,长期以来我们一直致力于提供以设计者为中心的创作环境,我们发现对于我们构建的应用类型,Flex 有时也不尽如人意。

但所有这一切都将发生改变。

这是一个全新的 Flex

Flex 开发模式非常适用于 ColdFusion 开发者。具有支持脚本的基于标记的抽象是我们提供的一个出色功能。我们还提供(并且应该提供)了 N 层开发并将后端处理与客户端交互相分离,这也是一个不错的功能。利用 XML、Web 服务和所有后端技术是我们构建的应用的重要部分,这也是一个不错的功能。

Flex 1.x 的其他方面对我们来说一直不尽如人意。在 Dreamweaver 顶部构建的 Flex Builder 1.5 适合某些 ColdFusion 开发者,但并不适用于所有的 ColdFusion 开发者。由于 Flex 1.5 控件通常缺乏面向数据的应用(我们大多数人都会构建)所需要的一些更复杂的功能,因此很多控制功能都是没有的。最重要的是,许可和部署选项也并不总是让人满意。实际上,一些应用需要服务器端 Flex 服务,而有一些应用则不需要。

好消息是 Flex 2 能够直接解决所有这些重要问题:

  • Flex Builder 2 是一个全新的 IDE,它构建在 Eclipse 工具平台的顶部。 这一高度以代码为中心的环境具有语言感知(包括代码着色和线上帮助)、拖放控制放置、简化的编译-调试-运行执行和集成调试等特性。Flex Builder 2 也可以作为独立的 IDE 或 Eclipse 插件提供,它是一种对我们某些编码人员颇具吸引力的工具。
  • Flex Framework 2 极大地增强了控件以及它们能够增强的任何东西。从大大增强的数据网格到改进的日历、全新的富文本编辑器(是的,使用它而非不太引人注意的 HTML <textarea> 标记)以及颜色选择器等等。大多数 ColdFusion 应用都是高度以数据为中心的,这些全新的改进控件非常适合在这些应用中使用。值得注意的是,新数据服务确实使在这些控件之间来回传递数据变得非常轻松,并且最终都会回到为其提供服务 的 CFC 中。
  • 在每个开发者的成本上,Flex 2 能够使您将 Flex 框架许可为 Flex Builder IDE 的一部分。此型号的产品不同于作为服务器销售和获得使用许可的 Flex 1.5,它要求客户购买 Flex 框架和运行时服务以用于服务器使用,并在运行时部署在服务器上。很明显,如果没有服务器端运行时服务,在操作时您就无法获得重要的功能(包括消息传递和刚刚提到的数据服务)。但是就像我已经说过的,我认为许多开发人员将能够构建和部署通过 SOAP 和 Flash Remoting 与 ColdFusion 通信的富应用,而需要的不过是 IDE 成本。

除了这些增强功能外,我们还创建了一个全新的 ColdFusion 适配器,它能够使 ColdFusion 在运行时将数据推到 Flash 客户端。该适配器处理往返于 ColdFusion 和 Flash ActionScript 之间的数据类型映射,支持 ColdFusion 组件和 ActionScript 类之间的对象映射,甚至提供对 ColdFusion 安全角色的访问。

我要表达的意思是,Flex 2 是 ColdFusion 的完美补充。开发者将会发现,二者组合在一起前所未有地促进了富 Internet 应用的创建和部署。

开始使用 Flex 2

那么,我们下一步的工作是什么呢?Macromedia 实验室*是技术和产品预览、预发行文档等的新场所。在什么是 Macromedia 实验室?*中找到更多信息。

在 Macromedia 实验室中,您将发现 Flex 2 技术的预发行版本,包括全新的 Flex Builder 2 (并且支持 Flash Player 8.5),以及以前提到的 ColdFusion 适配器。

因此,赶快行动吧。如果您已经将 Flex 和 ColdFusion 结合使用,那么,您应该去了解 Flex 2 将如何改进并简化您的开发。如果您还没有体验过 Flex,那么抓住机会,现在就开始行动吧。

关于作者

Ben Forta 是 Macromedia 的高级产品专家, 著有多本著作, 包括 ColdFusion Web Application Construction Kit* 及其续篇 Advanced ColdFusion Application Development*, 还有其它关于 SQL、JavaServer Pages、WAP、Windows 开发的著作, 以及更多。Ben 是 Macromedia 的官方 ColdFusion 培训材料、认证考试和针对这些考试的 Macromedia Press* 学习指南的作者之一, 目前他在世界范围内举办讲座、进行演讲和编写应用程序。Ben 的 blog 在 forta.com/blog*, 您可以在那里读到他定期发表的有关 ColdFusion 及其它主题的帖子。


 
wodesign @ 2007-03-14 20:48

涉及到的知识范畴:

  1. socket概念
  2. java编程语言
  3. Flash MX ActionScript中的XMLSocket

  实时网络游戏也属于大型应用程序范畴,一个关键环节就是建立实时主动通信环境(相对的,有个称为被动通。信的方式,最好的例子就是你正在用IE浏览器浏览一个网站,此时浏览器和服务器之间就是被动通信方式:如果你不点击一个连接,发送一个WEB页面请求到WEB服务器,WEB服务器是不会主动向你的浏览器发送任何页面的)。在此Socekt API就成为了首选。限于篇幅,这里不再过多解释socket的含义,只希望大家能记住一点,只要建立能够实时通信的应用程序就需要建立socket连接。
 
  【客户端FLASH编程部分】

  从mx自带的as字典中可以看出,Flash在网络通信方面得到了非常大的加强。“The XMLSocket object is useful for client-server applications that require low latency, such as real-time chat systems”注意最后的一小段话:such as real-time chat systems(译文:例如实时聊天系统)

  通过调用XMLSocket方法FLASH就可以和一些由强大语言编写的服务器应用程序进行通信,进而开发出各种实时信息交流系统。所以我们的目标锁定在XMLSocket!

  另外值得注意的是:有很多人一看到XMLSocket前面的XML三个字母,就觉得头疼,以为必须先熟悉甚至精通XML才能使用这个对象及其方法,但我要说的是在你不太了解XML的阶段,只要把XML信息看成是一个随意长度(>0)的字符串,把XMLSocket看成是一个只是用来发送字符串数据的对象就好办多了。

  我们还是从分析代码着手,来跨进开发FLASH实时网络游戏的大门吧:

  //建立XMLSocket对象
  var mySocket = new XMLSocket();
  mySocket.connect("127.0.0.1",3000);
  //测试建立socket连接是否成功
  mySocket.onConnect = function(success)
  {
   if(success)
   {
    trace("connect ok");
   }
   else
   {
    trace("connect failed");
   }
  }
  //End for 测试是否连接成功 成功建立连接后 向服务器端发送一个测试用的字符串,以便服务器端能显示出信息。
  
  mySocket.send("this is a testing String !!!");FLASH中的程序就先到此,因为是基础篇,所以不会涉及太多的其他东西。

  【服务器端java程序部分】

  import java.io.*;
  import java.net.*;
  public class LocalServer
  {
   protected int listenPort = 3000;
   public void acceptConnections()
   {
    try
    {
     ServerSocket server = new ServerSocket(this.listenPort);
     //在服务器端,我们需要ServerSocket对象以便建立服务,参数是兼听的端口号
     Socket incomingConnection = null;//创建一个客户端的Socket变量,以接收从客户端监听到的Socket
     handleConnection处理
     System.out.println("Server端正在等待一个socket连接......");
     incomingConnection = server.accept();//调用该 ServerSocket 的 accept()来告诉它开始侦听
     System.out.println("一个socket客户端已经连接过来......");
     handleConnection(incomingConnection);
    }
    catch (BindException e)
    {
     System.out.println("Unable to bind to port " + listenPort);
    }
    catch (IOException e)
    {
     System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);
    }
   }
   public void handleConnection(Socket incomingConnection)
   {
    System.out.println("\r\n正在对此连接进行处理......");
    try
    {
     //首先获取同Socket相关联的流outputToSocket和InputStream
     //其中outputToSocket是要返回给客户端Socket的流
     //InputStream是客户端发来的请求
     otputStream outputToSocket = incomingConnection.getOutputStream();
     InputStream inputFromSocket = incomingConnection.getInputStream();
     BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
     //首先要将InputStream转换到BufferedReader中
     String line = null;
     while ((line = streamReader.readLine()) != null)
     {
      System.out.println(line);
      //从streamReader中读出信息,直接输出到默认输出设备中(本例中是指dos窗口)
     }
     System.out.println("\r\n\r\n接受信息完毕!");
     //完成之后关闭所有流,注意关闭Socket流的顺序
     streamReader.close();
    }
    catch (Exception e)
    {
     System.out.println("Error handling a client: " + e);
    }
   }
   //主程序,建立sever实例对象,然后运行对象的acceptConnections()方法
   public static void main(String[] args)
   {
    LocalServer server = new LocalServer();
    server.acceptConnections();
   }
  }
  java服务端程序就到此为止了,此时已经能够建立起一个最简单的C/S结构通信体系。
  
  在此基础上再增加适当的东西 就能够开发出任何应用程序或者网络游戏。


 
wodesign @ 2007-03-06 13:13

(1)生活是不公平的,要去适应它;
        当然了,因为你是首富,你富可敌国,你当然要这么说。让大家适应,你好理所当然的来剥削。

(2)这世界在你有成就前不会在意你的自尊;
        和第一句话差不多。

(3)高中毕业别指望拥有太多;
        你大学好像也没有毕业吧。

(4)在有老板前别认为你老板严厉,而老板是没有任期限制的;
        估计你是不知道你自己有时候是多莫的无理与蛮横。

(5)烙牛肉饼不会有损你的尊严;
         牛肉?我一年才吃一次,还是朋友请的。

(6)你的困境不是你父母的过错;
         当然,你的父母是律师,是教师,是主席,你家住的是别墅,在你还小的时候。

(7)你的父母一直为你付帐单才变成现在的乏味;
          你的父母才乏味,我一年见父母7天,我们在一起热闹的不得了。

(8)你的学校可能不分优等生和劣等生,但这与现实生活没有任何相似之处;
          你瞎扯,学校不分的话,什么叫尖子,什么叫差生?

(9)生活中你没有暑假可以休息,也无人帮你发现自我;
          恩,给你打工都不可以休息的吗?发现自我?

(10)电视不是真实的生活;
          电视是反映真实的生活。

(11)善待乏味的人,你可能会为一个乏味的人工作。
           你果然很乏味,好,我善待你,我不骂你,我只用盗版XP。


 
wodesign @ 2007-03-05 23:10

http://flexapps.macromedia.com/flex15/explorer/explorer.mxml


 
wodesign @ 2007-03-05 22:45

flash的3D虚拟实境最早源自于德国的flash图形学大牛andre.michelle在其labsite:lab.andre-michelle.com上发表了一篇关于虚拟实境的文章,并提供了一个实例(NaN sourcecode).为了深入虚拟实境,在接下来的2个月里我陆续找到一些cubicVR的源文件并尝试破译了一些源码,我同时尝试开发了一个简单的flash3D引擎以及图片3D拉伸算法,所有这些的思想均来自于andre-michelle在其日志中提到的一些idea.现在在这篇文章中所用的实例依然是我对andre早期版本的整理,虽然目前我开发的新版本有更好的结构以及执行效率,但此版本的编程思想更通俗易懂。我想利用这个假期时间开发出flash球型虚拟实境,使它变得更真实。

在flash里部署3D虚拟实境无疑是一个革命性进步,我们再也不用去安装java虚拟机和QTVR了,事实上,在基于flash的可编程矢量图形界面基础上开发出来的虚拟现实可以通过创新的用户界面以达到完美的用户体验。city8.com既采用这种技术来部署他们的全景体验城市地图。

demo:鼠标拖拽以转换camera视角

原理:

点透视与投影

通过1点透视来产生远小近大的变化以产生空间感,在cubicVR中,设想观察者camera在一个正六面体中央,通过一点透视来计算每个面的在空间投影中的位置,以产生透视效果。

demo:没有导入透视方程的情况:

细分贴图

flash的matrix类只支持2D图形变换:切变、缩放、平面位移。位图无法实现3D变换,这与openGL不同,openGL只需要在定义多边型顶点和贴图法线,位图就会自动贴到一个面片上,而且整个贴图过程完全由GPU完成。而在flash中必须使用细分贴图的方法来欺骗人们的眼睛,既:将一张图片细分为n张小的三角面片,再将小三角面片进行平面切变,正因为如此,flash3D一旦涉及贴图必然导致大量占用cpu运算资源。

细分贴图的demo:
http://godson.blueidea.com/archives/2006/3708.shtml

消隐算法

如果没有消隐算法,那么观察者只能看到离屏幕最近的面,而不能看到整个3D空间,理论上消隐算法有3个步骤:1在一个六面体中,面法线与视锥体夹角大于180度则应设为不可见,2在同一个像素上,只显示与camera最近的多边形(Zbuffer算法),3投影在屏幕以外的多边型不可见,但这三种算法非常占用cpu资源,andrew设计了一种更简单的算法:1多边形的中心与camera重合,在camera坐标系中Z值<0的多边形不可见,2投影在屏幕以外的多边型不可见。



 
站内搜索
日历
网志分类
『所有网志』 (45)
滴水 (7)
观察 (8)
FLASH (12)
flex (1)
PS&PAINTER (1)
soft (7)
最新留言
友情链接
订阅 RSS
0009445
歪酷博客