我正在从纯Flash / AS3移植到Flex 4.5的纸牌游戏:
我差不多完成了,但是上面截图中用蓝色标记的“语音气球”丢失了。
那些“演讲气球”淡入,显示红色(如果它们包含心形或钻石字符)或黑色文字,最后淡出。
我正在尝试将这些实现为mx.controls.ToolTip并准备了一个简单的测试用例,其中3个用户由笑脸按钮代表,您可以按“对话”按钮使其成为谈:
<?xml version="1.0"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:s="library://ns.adobe.com/flex/spark"
width="400" height="300"
initialize="init();">
<fx:Declarations>
<s:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="2000"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.managers.ToolTipManager;
private var i:uint = 0;
private function init():void {
ToolTipManager.enabled = false;
ToolTipManager.showEffect = fadeIn;
}
private function talk():void {
var str:String = 'Me plays 10' + (i % 2 ? '♥' : '♠');
// this does not make the ToolTip appear?
this['user' + (++i % 3)].toolTip = str;
// how to set color according to isRed(str)?
}
private function isRed(str:String):Boolean {
return (str.indexOf('♦') > 0 || str.indexOf('♥') > 0);
}
]]>
</fx:Script>
<s:Button id="user0" horizontalCenter="0" bottom="0" label=":-)" />
<s:Button id="user1" left="0" top="0" label=":-)" />
<s:Button id="user2" right="0" top="0" label=":-)" />
<s:Button right="0" bottom="0" label="Talk!" click="talk()" />
</s:Application>
有人可以给我提示吗?
更新
我尝试了以下
private var tip0:ToolTip;
private var tip1:ToolTip;
private var tip2:ToolTip;
private function talk():void {
var str:String = 'Me plays 10' + (++i % 2 ? '♥' : '♠');
var btn:Button = this['user' + (i % 3)];
var tip:ToolTip = this['tip' + (i % 3)];
tip = ToolTipManager.createToolTip(str, btn.x + 10, btn.y + 10, "errorTipBelow", IUIComponent(btn)) as ToolTip;
}
但是效果不好 - 没有效果,没有消失(我想我必须自己调用destroyToolTip)。我想知道ToolTip是否可以(ab)用于我以优雅的方式表示“演讲气球”......
答案 0 :(得分:1)
就个人而言,我发现工具提示系统相当有限,而且每当我想做一些不同的事情时,手动实现它似乎更容易。通常在这种情况下,我会将PopUpAnchor控件添加到需要这些叠加显示的组件中。然后,您可以完全手动控制显示的内容以及显示的内容。
http://blog.flexexamples.com/category/spark/popupanchor-spark/
有很多方法可以做到这一点,只是将工具提示组件构建为Group的子类,将其添加为子项,并跟踪它。