-
解决菜鸟遇到的textField文本,用textFormat改变不了的问题
今天遇到了一个TextFiled文本改变字体颜色与大小时的可笑问题.
1.我创建一个TextField文本,代码如下:
import flash.text.TextField;
var label:TextField = new TextField();
label.htmlText = “Hello World…\nHellow”;2.我想用一个TextFormat使文本的颜色改变,代码如下:
import flash.text.TextFormat;
var labelCss:TextFormat = new TextFormat();
labelCss.color = 0xff0000;
labelCss.leading = 5;
labelCss.font = “Verdana”;3.最后我把TextFormat赋给TextField,但我看开发文档时直接使用了Textfield的setTextFormat方法,代码如下:
label.setTextFormat(labelCss);结果label一点反应都没有,后来再看flash手册,看到其中的”defaultTextFormat”属性,原来这个属性才是使用TextFormat的正确方法,
于是把代码修改成:
label.defaultTextFormat = labelCss;
若在使用setTextFormat方法,必须放在label.htmlText=”XXXXXXXX”这句的后面。就OK了.这种错误在写AS代码时经常范,flash在这方面也没有一个统一的规范,觉得有点凌乱.最后给出全部代码.
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;public class styleSheet extends Sprite {
public function styleSheet() {
var labelCss:TextFormat = new TextFormat();
labelCss.color = 0xff0000;
labelCss.leading = 5;
labelCss.font = “Verdana”;
var label:TextField = new TextField();
label.defaultTextFormat = labelCss;
label.htmlText = “<body><span class=’heading’>Hello </span>World…\nHellow</body>”;
addChild(label);
}
}
} -
试做flash游戏中的格子地图
今天做了一个flash格子地图的测试,要求是像游戏“三国志”一样在格子上建筑房子,每个格子是由棱形组成的。所以先建一个棱形的mc,然后用循环输出棱形,最后合成了格子地图。
测试中点击并没有房子,只是简单地输出了文字。下面是swf文件:
总结:做这种地图最难的是算法,研究这算法就花了我几页纸。数学不好还是不行。
源文件下载:map
-
flash 的p2p功能
flash的新协议:RTMFP , 服务允许Flash Player 10和AIR 1.5开发的客户端以P2P的形式交换数据。这里的P2P采用的是UDP协议,这项新的UDP协议被Adobe赋予一个新的名字:RTMFP(real time flow protocol),底层用UDP协议具有稳定、彻底减缓延迟,并且可以大大节省带宽,请看图示。 详细技术要等官方出文档。
-
Flex 的RemoteObject 通讯遇到的问题
今天做了一些flex的测试,是根据”flex第一步”这一本书来做的,主要是在服务端写一个java的类读取数据库数据,然后通过FDS用remotion来做通讯.
java服务端是这样写的:
package tree;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Collection;
public class GetUserService {
public static void main(String args[]){
GetUserService db = new GetUserService();
Collection arr = db.getUsers();
System.out.println(arr.toString());
}
//定义函数
public Collection getUsers(){
ArrayList<Map> list = new ArrayList<Map>();
String dbDriver = “com.mysql.jdbc.Driver”;
String dbServer = “localhost”;
String dbName = “walktree”;
String dbUser = “root”;
String dbPass = “feifei”;
String url = “jdbc:mysql://” + dbServer +”/”+dbName+”?user=”+dbUser+”&password=”+dbPass;
try{
Class.forName(dbDriver);
}catch(ClassNotFoundException e){
System.out.println(”连接出错”);
return null;
}
try{
Connection con = DriverManager.getConnection(url);
//创建数据库操作对象
Statement sta = con.createStatement();
String sql = “select * from userinfo”;
ResultSet rs = sta.executeQuery(sql);
Map<String , Object> user;
while(rs.next()){
user = new HashMap<String , Object>();
user.put(”username”, (String)rs.getString(”username”));
user.put(”url”, (String)rs.getString(”url”));
user.put(”email”, (String)rs.getString(”email”));
list.add(user);
//System.out.println(rs.getString(”username”));
}
return list;
}catch(SQLException e){
System.out.println(”无数据”);
return null;
}
}
}然后flex代码:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” fontSize=”12″
creationComplete=”init()”>
<mx:Script>
<![CDATA[
import mx.rpc.http.HTTPService;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import flash.events.Event;
import mx.managers.CursorManager;internal function init():void{
service.getUsers();
}
internal function resultHand(evt:ResultEvent):void{
CursorManager.removeBusyCursor();
myList.labelField = "username";
myList.dataProvider = evt.result;
}
internal function faultHand(evt:FaultEvent):void{
emailTxt.text = "fault"+evt.fault;
trace("fault"+evt.fault);
}
internal function selectHand(evt:Event):void{
var user:Object = myList.selectedItem;
userPanel.title = "详细信息"+user.username;
userTxt.text = user.username;
emailTxt.text = user.email;
urlTxt.text = user.url;
}
]]>
</mx:Script><mx:RemoteObject id=”service” fault=”faultHand(event)” showBusyCursor=”true”
destination=”userService” >
<mx:method name=”getUsers” result=”resultHand(event)” />
</mx:RemoteObject>
<mx:Panel x=”10″ y=”10″ width=”156″ height=”286″ layout=”absolute” title=”名册”>
<mx:List id=”myList” x=”0″ y=”0″ width=”100%” height=”244″ change=”selectHand(event)”/>
</mx:Panel><mx:Panel x=”183″ y=”10″ width=”276″ height=”286″ layout=”absolute” id=”userPanel”>
<mx:Label x=”10″ y=”10″ text=”Label” id=”userTxt” fontWeight=”bold”/>
<mx:Label x=”12″ y=”38″ text=”Label” id=”emailTxt”/>
<mx:Label x=”12″ y=”66″ text=”Label” id=”urlTxt”/>
</mx:Panel></mx:Application>
最后在tomcat下就是显示不出数据来,于是做了一些测试,在getUsers()函数最后返回一个字符串,如”Hell”,这样在在flex端就可以显示出内容,开始时怎么也想不出问题所在.怀疑是Map的数据与flex的不兼容,于是做了这样一个测试.:
ArrayList<Map> list = new ArrayList<Map>();
Map<String , String> note = new HashMap<String, String>();
note.put(”username”, “king”);
note.put(”email”, “king@163.com”);
note.put(”url”,”http://king.com”);
list.add(note);
Map<String , String> note2 = new HashMap<String, String>();
note2.put(”username”, “小明”);
note2.put(”email”, “xiao@163.com”);
note2.put(”url”,”http://xiao.com”);
list.add(note2);
return list;最后可以通过,flex显示,继续找答案,最后终于找到了.是因为服务端的程序,
Map<String , Object> user;
user = new HashMap<String , Object>();定义了Object,在java中Object类型的数据是如何应用的,我虽然不能说得很明白,但它至少不会像flex中的Object类型一样使用.而这本书明明是这样写的.看来此书《FLEX第一步》的很多代码是未经过测试的。国内的书一般都会多少有这样的特点,不是我极端。
明白了问题所在后,把上面的代码修改成:
Map<String , String> user;
user = new HashMap<String , String>();这样返回的值就显示正常了。




