今天尝试用Socket和AMF3来开发web游戏引擎,用Flash的好处就是因为插件普及率高,无需用户另行安装,所以用Flash来开发丰富的Web游戏成为很好的选择。服务端仍然采用apache mina+AMF3来写Socket服务程序。
演示效果图:
客户端代码:游戏角色类
-
-
-
-
-
-
- package
project.test {
-
- import
flash.display.*;
- import
flash.events.*;
-
- import
gs.TweenLite;
-
- public
class
GameRole
extends
Sprite {
- private
var _id:uint;
- private
var tween:TweenLite;
- public
function GameRole(id:uint,self:Boolean=
false
) {
- mouseChildren = false
;
- mouseEnabled = false
;
- _id = id;
- if
(self){
- this
.graphics.beginFill(
0xFF0000
);
- }else
{
- this
.graphics.beginFill(
0x000000
,
0.6
);
- }
- this
.graphics.drawRoundRect( -
10
, -
10
,
20
,
20
,
10
,
10
);
- this
.graphics.endFill();
- }
-
- public
function move(x:Number,y:Number):
void
{
- remove();
- this
.x = x;
- this
.y = y;
- }
-
- public
function to(x:Number, y:Number):
void
{
- remove();
- tween = TweenLite.to(this
,
1
, { x:x, y:y } );
- }
-
- public
function get id():uint {
- return
_id;
- }
-
- private
function remove():
void
{
- if
(tween !=
null
) {
- TweenLite.removeTween(tween);
- tween = null
;
- }
- }
-
-
- }
-
- }
文档类
-
-
-
-
-
-
- package
project.test {
-
- import
flash.display.*;
- import
flash.events.*;
- import
flash.net.Socket;
- import
flash.net.ObjectEncoding;
- import
flash.text.TextField;
- import
flash.utils.ByteArray;
- import
flash.utils.Dictionary;
-
- import
com.klstudio.data.Map;
-
- public
class
TestGame
extends
Sprite {
- private
var _socket:Socket;
- private
var _id:uint;
- private
var _lists:Map;
- private
var _info:TextField;
- public
function TestGame() {
- _info = new
TextField();
- _info.selectable = false
;
- _info.text = "未连接"
;
- addChild(_info);
-
- stage.addEventListener(MouseEvent.MOUSE_UP, handler);
- _lists = new
Map();
- _socket = new
Socket();
- _socket.objectEncoding = ObjectEncoding.AMF3;
- configureListeners(_socket);
- _socket.connect("localhost"
,
110
);
- }
-
- private
function configureListeners(dispatcher:IEventDispatcher):
void
{
- dispatcher.addEventListener(Event.CLOSE, handler);
- dispatcher.addEventListener(Event.CONNECT, handler);
- dispatcher.addEventListener(IOErrorEvent.IO_ERROR, handler);
- dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handler);
- dispatcher.addEventListener(ProgressEvent.SOCKET_DATA, handler);
- }
-
- private
function handler(event:Event):
void
{
- switch
(event.type) {
- case
ProgressEvent.SOCKET_DATA:
- var bytes:ByteArray = new
ByteArray();
- _socket.readBytes(bytes);
- bytes.uncompress();
- receive(bytes.readObject());
- break
;
- case
Event.CLOSE:
- debug("连接关闭"
);
- removeAll();
- break
;
- case
Event.CONNECT:
- debug("连接中..."
);
- break
;
- case
IOErrorEvent.IO_ERROR:
- case
SecurityErrorEvent.SECURITY_ERROR:
- debug("连接失败"
);
- break
;
- case
MouseEvent.MOUSE_UP:
- var mEvent:MouseEvent = event as MouseEvent;
- send(this
.mouseX,
this
.mouseY);
- break
;
- }
- }
-
- private
function send(x:Number, y:Number):
void
{
- if
(!_socket.connected) {
- return
;
- }
- var bytes:ByteArray = new
ByteArray();
- bytes.writeObject( { event:"move"
, x:x, y:y } );
- bytes.compress();
- _socket.writeBytes(bytes);
- _socket.flush();
- }
-
- private
function receive(object:Object):
void
{
- switch
(object.event) {
- case
"init"
:
- init(object.id);
- for
(var i:uint =
0
; i < object.list.length; i++ ) {
- var item:Object = object.list[i];
- add(item.id, item.x, item.y);
- }
- break
;
- case
"move"
:
- move(object.id, object.x, object.y);
- break
;
- case
"remove"
:
- remove(object.id);
- break
;
- case
"add"
:
- add(object.id);
- break
;
- }
- }
-
- private
function init(id:uint):
void
{
- this
._id = id;
- add(id);
- }
-
- private
function add(id:uint, x:Number = undefined, y:Number = undefined):
void
{
- x = x || stage.stageWidth / 2
;
- y = y || stage.stageHeight / 2
;
- if
(_lists.containsKey(id)) {
- return
;
- }
- var role:GameRole = new
GameRole(id,_id == id);
- role.move(x,y);
- addChild(role);
- _lists.put(id, role);
- }
-
- private
function move(id:uint, x:Number, y:Number):
void
{
- if
(_lists.containsKey(id)) {
- var role:GameRole = _lists.get(id);
- role.to(x, y);
- }
- }
-
- private
function remove(id:uint):
void
{
- if
(_lists.containsKey(id)) {
- var role:GameRole = _lists.remove(id);
- trace(role);
- if
(
this
.contains(role)) {
- removeChild(role);
- }
- role = null
;
- }
- }
-
- private
function removeAll():
void
{
- var keys:Array = _lists.keys();
- for
(var i:uint =
0
; i < keys.length; i++ ) {
- var role:GameRole = _lists.remove(keys[i]);
- if
(
this
.contains(role)) {
- removeChild(role);
- }
- role = null
;
- }
- }
-
- private
function debug(msg:String):
void
{
- _info.text = msg;
- trace(msg);
- }
-
- }
-
- }
这个尝试的游戏引擎功能很简单的,接下来可以加上更丰富的功能了 ...
分享到:
相关推荐
Socket编程与AMF3在IT领域是两个重要的概念,它们分别代表了网络通信的基础和一种高效的数据序列化机制。在本文中,我们将深入探讨这两个技术,并结合提供的资源,即一篇名为“socket+AMF3”的博客文章,来理解它们...
Java Socket AMF3 Flash Game Framework 是一个专门为Flash游戏设计的后端框架,它结合了Java技术和AMF3编码,使得游戏开发者能够构建交互性强、安全可靠的Web游戏。在这个框架中,Java作为服务器端语言,提供了稳定...
“flash源码”标签表明这个资源主要关注的是Flash编程方面的内容,可能包含AS3(ActionScript 3)代码,这是Flash中用于实现交互性和动画的主要脚本语言。用户可以通过这个源码学习如何在Flash中创建动态效果,或者...
3. **Socket通信**:如果需要进行低级别的双向通信,Flash和Java可以通过TCP或UDP套接字进行直接通信。但这需要在服务器端开放特定的端口,并处理跨域安全问题。 4. **AMF(Action Message Format)**:这是一种二...
1. **Flash简介**:Flash是由Adobe公司开发的一种矢量图形和富媒体播放平台,它允许开发者创建交互式动画、游戏、应用程序以及网络视频等内容。在2000年代初期,Flash广泛应用于网页设计,提供了丰富的用户体验。 2...
本文将深入剖析这款游戏的源代码,帮助读者理解和学习Flash AS3在游戏开发中的应用。 一、Flash AS3基础 Flash AS3(ActionScript 3.0)是Adobe Flash平台的核心编程语言,相比AS2,AS3具有更强的性能、类型检查和...
C#可以使用开源库如AMF.NET或FluorineFX来处理AMF数据,Flash端使用AS3的FlashNetLib库进行AMF通信。 4. **HTTP/HTTPS请求**:Flash的URLLoader类可以发起HTTP或HTTPS请求,C#端可以设置Web服务器处理这些请求。...
根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍有关ActionScript 3.0 (AS3) 中Socket编程的基础知识与应用实践。 ### 一、ActionScript 3.0 Socket简介 #### 1. Socket概念 在ActionScript 3.0中...
【JSP版Flash小游戏小偷-jsgame】是一款基于Java技术开发的小型在线游戏平台,主要利用了JSP(JavaServer Pages)技术和Flash技术。在本文中,我们将深入探讨这个项目涉及的技术点、应用场景以及其背后的开发原理。 ...
虽然Flex和Java之间可以通过Socket通信,但还有其他方式,如AMF(Action Message Format)和 BlazeDS / LCDS服务,它们提供更高级别的消息传递,支持对象序列化,以及更方便的服务调用。 总的来说,Flex Socket...
Java和Flash是两种在Web开发中广泛使用的技术,它们各自有着独特的优势,但在某些场景下,需要进行跨平台的交互,比如游戏开发、富互联网应用(RIA)等。本资料"java_and_flash.rar"主要探讨的就是Java和Flash之间的...
AS3.0本身不是用于3D图形开发的专门语言,但在Flash环境中,可以结合使用如Away3D这样的3D图形库来创建和操作3D内容。 4. 网络通信:文件提到了HTTP、AMF、JSON、Socket通信以及SocketAPI()。这表明游戏使用了基于...
在IT领域,Flash曾是一种广泛用于创建交互式和动态内容的平台,特别是在网页设计和开发中。本示例主要探讨的是如何使用Flash连接到数据库,从而实现数据的动态展示和交互。这一技术对于构建富互联网应用程序(RIA)...
此外,还有全屏模式的改进、多线程支持(通过Worker API)和高级文本引擎(Text Layout Framework),这些都极大地扩展了Flash的开发潜力。 三、图形与动画 Flash以其强大的图形绘制和动画制作能力闻名。文档中...
AMF Socket 试图通过隐藏尽可能多的细节来成为 Flash 网络的“简单按钮”。 此外,如果您更喜欢 JSON、MessagePack 等,您可以使用您想要的任何编码器/解码器功能。例子即将推出。请求 VS 消息AMF Socket 有两种...
在Web开发中,前端通常负责用户交互,而后端则处理数据存储和业务逻辑。AS3是Adobe Flash Professional、Flash Builder等工具支持的编程语言,它能够通过XMLSocket、HTTP、AMF等协议与服务器进行通信。 描述中提到...
在IT领域,尤其是在Web开发中,Flash与C#的交互是一项重要的技术,它允许富互联网应用程序(RIA)和服务器端程序之间进行数据交换,提升用户体验。本资源"Flash与C#交互全集(bs与cs)"提供了全面的指导,涵盖了B/S...
Flash是一款由Adobe公司开发的多媒体创作平台,常用于创建动态网页元素、游戏和交互式内容。它提供了丰富的视觉体验,但其天然的局限性在于,直接处理服务器数据的能力较弱。为了弥补这一不足,开发者通常会借助于与...