所以,我在HTML / Flash混合交互式地图的截止日期前开始接触电线,并且它几乎没有完成。我一直在接近解决每个问题,只是为了发现更多的错误。当你看到这些作品时,大多数都很明显。我想至少压制大错,所以我非常感谢任何建议。请帮助!
基本上,我使用工具提示有两种方式:[0]
传统上基于Flash的onMouseMove(工作正常),[1]
非常规地从HTML列表中定位Flash电影中的一个点。工具提示很好,但由于Map移动和放大,它位于错误的位置。通过TweenLite进行扩展。 onMouseOver / onMouseOut事件也存在错误,其中onMouseOver再次触发onMouseOut,当它应该具有_alpha为0时,工具提示可见。
链接到作品:http://muralapts.com/test/neighborhood.php
---- BIG ISSUE#1: HTML onMouseOver再次触发onMouseOut,有效地“重新开启”我的工具提示。当Tooltip不会消失时真的看起来很烦人。没有错误,因此我无法弄清楚为什么onMouseOver会发射两次。似乎是一个HTML问题,而不是Flash问题。
---- BIG ISSUE#2:由于父剪辑被缩放,因此从页面左侧的HTML列表触发的工具提示显示在错误的位置与TweenLite一起移动。工具提示附加到_root,但是在几个容器剪辑(未在下面指定的路径)中“定位”一个点。我试图得到像这样的工具提示位置:
Tooltip._x = ( dot._x + parentClip._x ) * parentClip._xscale/100;
Tooltip._y = ( dot._y + parentClip._y ) * parentClip._yscale/100;
XML内容动态生成 HTML和Flash地图数据(id,name, 链接,模糊,类别编号 [艺术, 购物等] ,列表编号 [内的数字 类别])。使用Magic Parser从Flash正在使用的相同XML文件中呈现HTML输出。
HTML / Javascript与自定义AS2对话 通过外部接口映射组件
地图最初放大到140%并使用TweenLite移动到某个点
Flash电影中onRollOver的点显示带有地名的工具提示,更改点颜色
放大/缩小按钮设置父剪辑_xscale + _yscale并使用TweenLite onUpdate录制
HTML的列表中的onMouseOver显示了具有地图数据的工具提示,但是在错误的位置,因为地图已经缩放&与TWEENLITE一起搬家。使用TweenLite onUpdate记录父剪辑的缩放+位置值。
从HTML改变点的颜色onMouseOver,onMouseOut是“粘性的”(点保持黑色)
XML CODE:(显示一个类别+列表,还有更多)
<category title="Arts & Entertainment">
<loc id="artsWest_mc" name="Arts West" website="http://www.artswest.org/" cat="0" num="0">
<content><![CDATA[The Junction's thriving community playhouse & art gallery.]]></content>
</loc>
</category>
HTML CODE:
<script type="text/javascript"><!--
function showTooltip(btnID,catNum,listNum) {
thisMovie("map").showTooltip(btnID,catNum,listNum);
}
function removeTip(btnID, catNum, isExternal) {
thisMovie("map").removeTip(btnID, catNum, true);
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
} else {
return document[movieName]
}
}
//--></script>
<a onMouseOver="showTooltip( btnID, categoryNum, listingNum )" onMouseOut="removeTip()">Arts West</a>;
闪断代码:
public function showTooltip( bt:MovieClip, catNum:Number, listNum:Number ){ //MOVES MAP & SHOWS TOOLTIP
TweenLite.to(map_mc, 1, {_x:destX, _y:destY, ease:'easeOutQuad',
onUpdate: trickTip,
onUpdateParams: [bt, contentArr[catNum].childNodes[listNum].attributes.name]
});
}
public function trickTip( btnID:MovieClip, btnName:String ){ //CALLED FROM EXTERNAL INTERFACE
theTip.theText.text = btnName;
theTip._x = ((btnID._x + btnID._parent._x) * (map_mc._xscale/100)) - (theTip._width *.75);
theTip._y = ((btnID._y + btnID._parent._y) * (map_mc._yscale/100)) + 20;
TweenLite.to(theTip, .01, {_alpha:99, overwrite:1});
}
public function removeTip( bt:MovieClip, catNum:Number ){
TweenLite.to(theTip, .01, {_alpha:0, overwrite:1});
}
答案 0 :(得分:0)
使用MovieClip::localToGlobal
作为职位问题......
import flash.geom.Point;
var pt:Point = new Point();
dot.localToGlobal(pt);//dot being the clip with the position you actually need ...
//pt.x and pt.y are the required positions now ...
关于奇怪的HTML行为,如果不调试自己,我无法帮助你...我不是那么多的专家... :-D
快速修复可能会延迟工具提示隐藏:
activeID
... setTimeOut(removeTip, 100, bt, catNum)
)activeID = null
放入removeTip 我希望,这更不清楚......
来自showTooltip的uTm调用技巧提示onUpdate对我来说似乎很奇怪...我认为你应该真的清理它...有一个函数,这是一个补间的更新函数,并且是从外部接口调用的,真是凌乱......现在更好地改变它,你知道它做了什么...... 好吧,希望这会有所帮助......格尔茨
back2dos
答案 1 :(得分:0)
关于BIG ISSUE#2:
我觉得我理解localToGlobal
,但它正在为离开地图的每个点记录x
和y
。
父地图片段是760 x 916像素(屏蔽@ 400 x 600),但是我的代码输出是将每个点的“localToGlobal
”x值记录在800到1600之间 - 离开舞台。
Flash影片中的OnMouseOver,每个dot._x
记录在100到300之间,左边的父剪辑位于0,0 ...那么877来自哪里?是因为我动态地设置父剪辑的_x
/ _y
动画并增加_xscale
/ _yscale
(最初为140)?
_xscale
/ _yscale
如何影响localToGlobal x坐标?
我添加了建议的代码,其中我启动了点(同时循环遍历XML层次结构) - 有2个循环,每个XML类别[i]
和列出[g]
。不可否认,我的代码变得复杂了。我尝试将Tooltip传递给我用于移动地图的相同“destX”值,但这不起作用 - 可能是因为我相对于地图本身传递值,而工具提示位于_root
上。这是localToGlobal
应该帮助的地方吗?
/////* Map.as */////
private function initMap() {
// contentArr = XML Array
for(var i:Number = 0; i < contentArr.length; i++){
categories = contentArr[i].childNodes;
numCategories = categories.length;
for(var g:Number = 0; g < numCategories; g++){
dotIDs = categories[g].attributes.id;
dot = map_mc[dotIDs];
// link dot movieClips on Stage to each XML listing
dot.catNum = i; // category number - Arts [0], Shopping[1], etc.
dot.listingNum = g; // each indiv. listing number
pt = new Point(); // New code
pt = eval('pt_' + i + '_' + g); //Appending cat/list numbers for unique ids
ptArray.push(pt);
ptArray['pt_' + i + '_' + g] = {x:dot._x, y:dot._y};
dot.localToGlobal(ptArray['pt_' + i + '_' + g]);
}
}
}
// ˘˘being called from externalInterface
public function showTooltip(bt, catNum, listNum){
var newBT = eval(_root.mapContainer_mc.map_mc + '.' + bt);
// so I don't have to use the entire path in HTML
goto(newBT, catNum, listNum);
}
public function goto(bt, catNum, listNum){ // moves map, calls Tooltip.trickTip()
destX = 0-(bt._x-(mask_mc._width/3));
destY = 0-(bt._y-(mask_mc._height/3));
if(destX < 10-(map_mc._width-mask_mc._width)) destX = 10-(map_mc._width-mask_mc._width);
if(destY < 10-(map_mc._height-mask_mc._height)) destY = 10-(map_mc._height-mask_mc._height);
if(destX > 10) destX = 10;
if(destY > 10) destY = 10;
TweenLite.to(map_mc, 1, {_x:destX, _y:destY, ease:'easeOutQuad', overwrite:3,
onUpdate:trickTip,
onUpdateParams:[ bt,
catNum,
listNum,
/* theText*/ contentArr[catNum].childNodes[listNum].attributes.name
]
});
}
/////* Tooltip.as */////
public function trickTip(catNum:Number, listNum:Number, theText:String):Void {
theTip._x = ptArray['pt_'+catNum+'_'+listNum].x; //Somewhere way off stage
theTip._y = ptArray['pt_'+catNum+'_'+listNum].y;
}
答案 2 :(得分:0)
嘿我不确定你的工具提示问题,但是我在不同的应用程序上使用相同的概念。我正在为一些增强现实3D模型提供一个工具提示,我有一个鼠标悬停问题,工具提示在鼠标输出上重复。我在flash中100%这样做,所以我知道它不是HTML问题。
无论如何,在谷歌搜索中发现了这一点,我想我会告诉你它也发生在我身上而且我不使用HTML。