许久不曾写随笔,即使许久的怠惰,是该抬抬头,看看天了。
公司项目,项目要求是在winForm端先获取下位机的肌电信号采集数据,然后根据这些数据的变化来控制flash游戏,这样一些患者在flash游戏中达到肢体训练的效果。
在这里 需要用到c#与flash的通信, 先上通信示例
ActionScript3.0 与ActionScript2.0 略有差异,但和C#的通信方式是不变的。
function xmlToArray(list:XML):Array { //xml转数组 list.ignoreWhite = true; var ar:Array = new Array(); var list_node:XMLNode = list.firstChild.childNodes[0]; var l:Number = list_node.childNodes.length; for (var i:Number = 0; i<l; i++) { var node:XMLNode = list_node.childNodes[i]; var ob = new Array(); ob.push(node.childNodes[0].childNodes[0].nodeValue); ob.push(node.childNodes[1].childNodes[0].nodeValue); ar.push(ob); } return ar; } ExternalInterface.addCallback("onPlatformMessage",null,onPlatformMessage); var xmlContent:XML; var messageName:String, messageType:String, gameId:String; function onPlatformMessage(args:String) { xmlContent = new XML(args); list_arr = xmlToArray(xmlContent); //fscommand('Message', '<Message name="GAME_SCORE_REPLY" type="2" gameId="4025"><PlayerScore>'+list_arr+'</PlayerScore></Message>'); messageName = xmlContent.firstChild.attributes.name; messageType = xmlContent.firstChild.attributes.type; gameId = xmlContent.firstChild.attributes.gameId; if (messageType == '1' && gameId == '4025') { switch (messageName) { case 'GAME_VERSION' : fscommand('Message', '<Message name="GAME_VERSION_REPLY" type="2" gameId="4025"><GameVersion>1.0</GameVersion></Message>'); break; case 'PLAYER_ENTER' : if (gameFinished) { playerMode = xmlContent.childNodes[0].childNodes[0].childNodes[0].nodeValue; if (playerMode != 3) { //playerMode=xmlContent.PlayerMode; playerName = xmlContent.childNodes[0].childNodes[1].childNodes[0].childNodes[0].nodeValue; level = xmlContent.childNodes[0].childNodes[2].childNodes[0].nodeValue; score = xmlContent.childNodes[0].childNodes[1].childNodes[1].childNodes[0].nodeValue; if(level>25)(level=1); gotoAndStop(3); fscommand('Message', '<Message name="GAME_ENTER_OK" type="2" gameId="4025"></Message>'); } } break; case 'GAME_PAUSE' : if (!gameFinished) { pauseGame(true); } break; case 'GAME_RESUME' : if (!gameFinished) { continueGame(); } break; case 'GAME_LEAVE' : gameFinished = true; fscommand('Message', '<Message name="GAME_LEAVE_OK" type="2" gameId="4025"><PlayerScore>'+score+'</PlayerScore><GameStage>'+level+'</GameStage></Message>'); break; case 'GAME_HELP' : break; case 'GAME_SOUND' : break; case 'GET_GAME_SCORE' : fscommand('Message', '<Message name="GAME_SCORE_REPLY" type="2" gameId="4025"><PlayerScore>'+score+'</PlayerScore></Message>'); break; case 'GET_GAME_STAGE' : fscommand('Message', '<Message name="GAME_STAGE_REPLY" type="2" gameId="4025"><GameStage>'+level+'</GameStage></Message>'); break; case 'SET_GAME_STAGE' : if (!gameFinished) { level = xmlContent.childNodes[0].childNodes[0].childNodes[0].nodeValue; gotoAndPlay(4); fscommand('Message', '<Message name="SET_GAME_STAGE_OK" type="2" gameId="4025"></Message>'); } break; case 'GET_GAME_STATUS' : //tmpInt = xmlContent.firstChild.attributes.GameStage; fscommand('Message', '<Message name="GAME_STATUS_REPLY" type="2" gameId="4025"><GameStatus>'+gameStatus+'</GameStatus></Message>'); break; case 'SET_LANGUAGE' : var language = xmlContent.firstChild.attributes.GameLanguage; break; default : searchHighscore(); } } //end if } //end onPlatformMessage