Browsed by
分类:站长拙作

AS3谷歌地图(Google Mps)

AS3谷歌地图(Google Mps)

最近做的一个谷歌地图的练习,效果如下:

 

 

主类的代码:

 

[codesyntax lang=”actionscript3″ lines_start=”1″ tab_width=”10″]

package com.sqstudio.control
{
	import com.google.maps.Color;
	import com.google.maps.InfoWindowOptions;
	import com.google.maps.Map;
	import com.google.maps.MapEvent;
	import com.google.maps.controls.MapTypeControl;
	import com.google.maps.controls.NavigationControl;
	import com.google.maps.controls.OverviewMapControl;
	import com.google.maps.controls.ScaleControl;
	import com.google.maps.services.ClientGeocoder;
	import com.google.maps.services.GeocodingEvent;
	import com.google.maps.services.GeocodingResponse;
	import com.google.maps.services.Placemark;
	import com.sqstudio.common.IPProxy;
	import com.sqstudio.common.SysConfig;
	import com.sqstudio.vo.IpVo;

	import flash.events.Event;
	import flash.geom.Point;
	import flash.text.TextFormat;

	import flashx.textLayout.formats.TextAlign;

	public class MapController
	{
		private var googleMap:Map;
		private var geocoder:ClientGeocoder;
		private var ipVo:IpVo;
		public function MapController()
		{
			init();
		}
		private function init():void{
			googleMap = new Map();
			googleMap.sensor = "false";
			googleMap.key = SysConfig.MAP_API_KEY;
			googleMap.addEventListener(MapEvent.MAP_READY, mapReadyHandler);
			googleMap.setSize(new Point(SysConfig.STAGE.stageWidth, SysConfig.STAGE.stageHeight));

			//NavigationControl - ScaleControl  为一组UI
			//ZoomControl - PositionControl 为一组UI

			googleMap.addControl(new ScaleControl());
			googleMap.addControl(new NavigationControl());
//			googleMap.addControl(new ZoomControl());
//			googleMap.addControl(new PositionControl());
//
			googleMap.addControl(new MapTypeControl());//地图类型
			googleMap.addControl(new OverviewMapControl());//小型地图-缩略图
			SysConfig.STAGE.addChild(googleMap);
			googleMap.visible = false;
		}
		/**
		 *地图准备就绪
		 * @param event
		 *
		 */
		private function mapReadyHandler(event:Event):void
		{
			geocoder = new ClientGeocoder();
			geocoder.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, geocodingSuccessHandler);
			geocoder.addEventListener(GeocodingEvent.GEOCODING_FAILURE, geocodingFailHandler);
			var ipProxy:IPProxy = new IPProxy();
			ipProxy.getIp(getIpResult);
		}
		/**
		 *获得IP地址,进行解析
		 * @param ipVo
		 *
		 */
		private function getIpResult(ipVo:IpVo):void{
			this.ipVo = ipVo;
			geocoder.geocode(this.ipVo.cip);
		}
		/**
		 *解析地址成功
		 * @param event
		 *
		 */
		private function geocodingSuccessHandler(event:GeocodingEvent):void
		{
			googleMap.visible = true;
			var place:Placemark = GeocodingResponse(event.response).placemarks[0];
			googleMap.setCenter(place.point,9);//10-缩放级别

			var infoWindowOptions:InfoWindowOptions = new InfoWindowOptions();
			infoWindowOptions.title = "欢迎访问斯樵工坊(SQStudio.com)";
			var titleFmt:TextFormat = new TextFormat(null,12,Color.BLUE);
			titleFmt.align = TextAlign.CENTER;
			infoWindowOptions.titleFormat = titleFmt;
			infoWindowOptions.content = "你的位置:"+place.address;
			infoWindowOptions.content += "\n经纬度:"+place.point;
			infoWindowOptions.width = 260;
			infoWindowOptions.hasShadow = true;

			googleMap.openInfoWindow(place.point,infoWindowOptions);
		}
		/**
		 *解析地址失败
		 * @param event
		 *
		 */
		protected function geocodingFailHandler(event:GeocodingEvent):void
		{
			if(!this.ipVo.isIpError){
				trace("解析IP失败:"+event.name);
				this.ipVo.isIpError = true;
				geocoder.geocode(String(this.ipVo.cname));
			}else if(!this.ipVo.isNameError){
				trace("解析城市名称失败:"+event.name);
				this.ipVo.isNameError = true;
				geocoder.geocode("北京市");//解析失败默认北京
			}
		}
	}
}

[/codesyntax]
谷歌Map 中文AS3 API地址:
http://code.google.com/intl/zh-CN/apis/maps/documentation/flash/reference.html

获得本地IP方式:

2.几个IP查询接口(JS):

(注意: 这三个接口中,只有新浪接口下有crossdomain.xml文件,所以如果用AS3直接访问的话,建议选择新浪接口,不然会遇到安全沙箱哦!)

 腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress
 新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js(还有json和xml格式)
 新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=12.130.132.30
 搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson
 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8
 搜狐另外的IP地址查询接口:http://txt.go.sohu.com/ip/soip
FLV—Player视频播放器

FLV—Player视频播放器

 

功能说明:

1.实现了视频播放、暂停,全屏,显示网站logo,调用广告等常用功能,广告会在暂停时显示,可以手动关闭。

2.单击视频 实现播放和暂停的切换,双击视频实现全屏模式和正常模式的切换,全屏模式下,工具条会在自动隐藏。

3.音量控制,默认0.5,通过拖动滑块和点击音量条两种方式改变音量,直接点击声音按钮实现正常声音和静音的切换。

4.进度条控制,缓冲完成的部分,有时间提示,通过拖动滑块和点击进度条两中方式改变播放的进度。

5.加载预留5秒钟播放长度,即缓冲区数据不足时,自动暂停播放,并开始加载视频流,加载完成足够播放5秒的数据流,自动开始继续播放。

 

欢迎留言,技术交流,右边栏有我的QQ和微博!

源码暂时还不能提供,但是可以交流下开发的思路,以及遇见的问题!

斯樵-Nestor

 

Flash变形相册

Flash变形相册

看到网上很多相册,或者是flash网站的展示页面,有下面这种flash加载下一张图片时的变形效果,感觉很不错,就尝试写了下这个效果。

只是一个很简单 的效果,有兴趣的朋友可扩展下做成相册,呵呵!(有人做的话,做好了记得分享下,我也围观下!)

效果如下:

变形相册截图

注:1.点击图片  或此处 查看效果, 下载载本地效果更佳!

代码如下:


code:
import com.greensock.TweenLite;
import com.greensock.TweenLite;
import flash.events.MouseEvent;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.Sprite;
import flash.events.ProgressEvent;
/*
by Nestor/斯樵
www.sqstudio.com
*/
var sp:Sprite =new Sprite();
var picLoader:Loader=new Loader();
var picArr = ["image/1.jpg","image/2.jpg","image/3.jpg","image/4.jpg"];
stage.addEventListener(MouseEvent.CLICK,onCK);
var id:int = 0;
init();
function onCK(e:MouseEvent):void {
sp.removeChild(picLoader);
picLoader.unload();
init();
stage.removeEventListener(MouseEvent.CLICK,onCK);
load_txt.visible = true;
}
function picPro(e:ProgressEvent):void {
load_txt.text = Math.round(e.bytesLoaded / e.bytesTotal * 100).toString() + "%";
}
function picCom(e:Event) {
load_txt.visible = false;
var wid:Number = Number(e.target.width) + 10;
var hei:Number = Number(e.target.height) + 10;
picLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,picCom);
TweenLite.to(sam_mc,1,{width:wid,height:hei,onComplete:tweenCom});
}
function tweenCom() {
sp.addChild(picLoader);
sp.x = sam_mc.x - sam_mc.width / 2 + 5;
sp.y = sam_mc.y - sam_mc.height / 2 + 5;
addChild(sp);
stage.addEventListener(MouseEvent.CLICK,onCK);
}
function init() {
picLoader.load(new URLRequest(picArr[id]));
picLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,picPro);
picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,picCom);
if (id == picArr.length - 1)
{
id = 0;
} else
{
id++;
}
}

源码下载:千脑网盘 解压密码:www.sqstudio.com

本实例用所用到的TweenLite类 可到官网下载