AS3实例:分类订阅

其实也不知道用什么标题好,暂且叫拖动订阅吧,腾讯QQ新闻弹窗有分类个性化定制的功能,觉得挺实用的。

[img]http://dl.iteye.com/upload/attachment/0066/1706/bf5f9edb-284a-349a-87ac-0eda445eca78.jpg[/img]

用AS写了个,


[img]http://dl.iteye.com/upload/attachment/0066/1708/5677ca4f-2def-3405-9760-7ccb4558d61c.jpg[/img]




package
{

import flash.display.Sprite;
import flash.events.MouseEvent;


/**
* www.duowan.com
* @author hacker47
*/
[SWF(width="1000",height="600")]
public class NewsSetting extends Sprite
{

private var items:Vector.<Item>;
private var icons:Vector.<ItemIcon>;

private var selectItemNums:int = 6;
private var itemNums:int = 15;

private var startX:Number = 20;
private var startY:Number = 200;
private var itemWidth:Number = 80;

private var currentItemInd:int;
private var isCollision:Boolean = false;

public function NewsSetting()
{
icons = new Vector.<ItemIcon>();
items = new Vector.<Item>();

var i:int = 0;
var item:Item;

for (i = 0; i <= itemNums; i++ ) {
var sx:Number;
var sy:Number;
if (i < selectItemNums) {
sx = startX + i * itemWidth;
sy = startY - 130;
}else {
sx = startX + (i - selectItemNums) * itemWidth;
sy = startY;
}

item = new Item(sx, sy);
addChild(item);
items.push(item);
}

initItem(10);
}



private function initItem(length:int):void {
for (var i:int = 0; i <= length; i++ ) {
var icon:ItemIcon = new ItemIcon(i.toString());
icon.x = items[i].x + 4;
icon.y = items[i].y + 4;
icon.itemIndex = i;
addChild(icon);
icons.push(icon);
icon.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
}
}

private function onDown(e:MouseEvent):void {
var icon:ItemIcon = e.target as ItemIcon;
//把当前对象置于最顶层
icon.parent.setChildIndex(icon, icon.parent.numChildren - 1);

icon.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
icon.addEventListener(MouseEvent.MOUSE_UP, onUp);
}

private function onUp(e:MouseEvent):void {
var icon:ItemIcon = e.target as ItemIcon;
icon.stopDrag();
icon.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
icon.removeEventListener(MouseEvent.MOUSE_UP, onUp);

if (!isCollision) {
var item:Item
item= items[icon.itemIndex];
icon.x = item.x + 4;
icon.y = item.y + 4;
}else {
insertEelementToVector(currentItemInd, icon);
orderAll();
isCollision = false;
}
}

private function onMove(e:MouseEvent):void {
var icon:ItemIcon = e.target as ItemIcon;
icon.startDrag(false);
checkCollision(icon);
}



private function checkCollision(icon:ItemIcon):void {
var item:Item;
for (var i:int = 0; i < itemNums; i++ ) {
if (icon.itemIndex == i) break;

item = items[i];
//碰撞检测
if (icon.hitTestObject(item)) {
if (isCollision==false) {
isCollision = true;
//trace("碰撞了"+i);
//insertEelementToVector(i, icon);
currentItemInd = i;
}
return ;
}else {
isCollision = false;
}
}
}

private function insertEelementToVector(index:int, element:ItemIcon):void {
var startInd:int = element.itemIndex;
icons.splice(index, 0, element);
if (index > startInd) {
icons.splice(startInd , 1);
}else if (index < startInd) {
icons.splice(startInd + 1, 1);
}

}



private function orderAll():void {
for (var i:int = 0; i < icons.length; i++ ) {
icons[i].x = items[i].x + 4;
icons[i].y = items[i].y + 4;
icons[i].itemIndex = i;
}

}

}

}
import com.duowan.util.DrawUtil;
import flash.display.Stage;
import flash.geom.Point;

internal class Item extends flash.display.Sprite {
private var _width:Number=60;
private var _height:Number=60;

public function Item(x:Number, y:Number) {
this.x = x;
this.y = y;
DrawUtil.drawRect(graphics, new Point(), _width, _height);
}

}




package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;

/**
* www.duowan.com
* @author hacker47
*/
public class ItemIcon extends Sprite
{

public var itemIndex:int;

private var txt:TextField = new TextField();
public function ItemIcon(txtstr:String="")
{
graphics.clear();
graphics.lineStyle(1);
graphics.beginFill(Math.random() * 0xffffff);
graphics.drawRoundRect(0, 0, 53, 51, 5);
graphics.endFill();
txt.selectable = false;
txt.mouseEnabled = false;
txt.width = 50;
txt.height = 50;
//addChild(txt); //for test
var tf:TextFormat = new TextFormat();
txt.text = txtstr;
tf.align = "center";
tf.color = 0xFF0000;
tf.size = 30;

txt.setTextFormat(tf);


}



}

}

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值