发新话题
打印

[Flash教程] Flash实例:FLASH内部复制粘贴图形

Flash实例:FLASH内部复制粘贴图形

内部的复制粘贴 代码如下:0 X, U1 T' P. k: n
import flash.display.BitmapData; & k: L, R, F  T" N
var _bmp:BitmapData = new BitmapData(_mc._width, _mc._height); - b/ `& [! x% k# k" @' w! t8 [
var paste_mc:MovieClip = this.createEmptyMovieClip("paste_mc", 2);
! q5 Y' R" F6 T# c$ a( d///////////////
1 r0 q5 x" z2 |var _menu = new ContextMenu();
0 K7 o) ~& S, s8 T# T7 Mfunction copy_func() {   x9 U0 w- T, N- l, K. f; B) ^
_bmp.draw(_mc); , T4 N$ l3 p2 R0 k8 ^7 C& t/ \
paste_menu.enabled = true; / q6 r* `  A8 C. k) X; c
}
- S" ?$ y1 w2 V1 jfunction paste_func() { " [9 V+ S8 |4 X! f: n/ l
paste_mc.attachBitmap(_bmp, 0, "always", true);
2 l( x% x6 k( c) B0 m, A& W$ jpaste_mc._x = _xmouse; ' i; z, y% E4 r# W# W3 a
paste_mc._y = _ymouse; 8 ~6 s+ `0 x4 p0 [! f/ h* _6 d# T
} ( X# w) p  S; e  X
_menu.hideBuiltInItems();
. k( v1 ?: ~: `var copy_menu:ContextMenuItem = new ContextMenuItem("复制", copy_func);
& l) E, b. H( `& g$ \& y9 A% Nvar paste_menu:ContextMenuItem = new ContextMenuItem("粘贴", paste_func); 0 {/ t% {- j$ b, a
paste_menu.enabled = false;
) a) s! W7 `3 Q) J- E; n_menu.customItems.push(copy_menu, paste_menu);
" f& ?# ~3 ~6 Q; W4 }) O% @/ vthis.menu = _menu;" ~3 s  G  J. k/ C$ O6 ~# o- r
源文件下载点击这里下载源文件
3 m- L, Q! N$ f 摄像头画面的复制
0 W2 u% Y9 }) a& m& N代码:
1 o3 w7 P, d/ w. f: d2 s; W, F! }+ p  \: \0 I" R; W2 w
//引入Bitmap类
) u4 x( [$ e, o: Z% y  Himport flash.display.BitmapData; ( W- b& Q% n7 m1 u# z
var _bmp:BitmapData;
% U+ d+ Q8 e3 }. o///////////////打开摄像头,为了下面的识别复制了哪个对像,所以把视频装进了MC ) q* M  j5 j5 v6 ?. [, S
var _cam:Camera = Camera.get();
) F% I2 b2 g) f! l% `3 b0 z" h_cam.setMode(320, 240, 10, true);
4 i" |& O# n! `, A3 ^  c_mc3._video.attachVideo(_cam); # q- F. {" I& z2 i6 a3 u% d
//////////////////// 0 @2 T# S6 ^+ ?  c2 T. D) [
//新建右键 菜单 + }. h: \0 t, c! \
var _menu = new ContextMenu();
8 \$ A) k7 j% u- P* p( p: h//设置一个变量来记录复制出来的MC的深度,让它递加,不让MC重复 ) {) h2 p. x. S. o4 I
var depth:Number = 1; % d3 l, p$ H, ^- P  {( B$ F, d2 w3 u
//复制函数
' n* f: E* R0 P9 Bfunction copy_func() {
, ^9 Q6 Z- V* ?: O# @//用for循环来试,鼠标当前是位于哪个MC之上,就用BMP类绘制哪个对像
* a3 p0 g* v4 d5 j) nfor (var d:Number = 3; d>=0; d--) { 7 W  Q, k7 @- h" ~: E, E/ E  ~
  if (_root["_mc"+d].hitTest(_xmouse, _ymouse)) {
% ^0 |. Y5 F' b; O3 W1 p   //绘制鼠标接触的那个MC的图形,并记录在_BMP这个实例中
& x0 K; F+ E3 ~6 W   _bmp = new BitmapData(_root["_mc"+d]._width, _root["_mc"+d]._height); & O' s1 |7 z! ^5 S6 @8 q
   _bmp.draw(_root["_mc"+d]);
; H" O5 t' O, t% \8 ]7 d   //让粘贴这个右键菜单生效,才打开时它是灰色不可用的 ! h  ~% }* o1 l2 Q, s2 F
   paste_menu.enabled = true; % d' A! v' C0 y" `
   //鼠标不可能同时接触两个MC,所以一但检测到接触就跳出循环。  
1 E. s  @  O+ z! p- ]$ |1 @   break;
% I3 K& {* u( c: J! C$ ~1 {  }
/ a. r9 A4 D9 y! W9 ]' b} " `* I# f+ e; p( e9 I2 e  }4 p5 z
} 3 H* j# {/ \: z5 L
//粘贴函数 % F7 K+ g4 f( Y* B4 y& \% [( t! p
function paste_func() { ; k: n) g3 w6 L: f+ F, b$ |- F
//就是粘贴一次,就在当前的鼠标位置新建一个MC,然后attchBitmap就在新的MC中生成了一个新的图像 & [. H# E) W+ `3 X% ]: r
_root.createEmptyMovieClip("paste_mc"+depth, depth+100);
( n. j5 }/ I# H5 __root["paste_mc"+depth].attachBitmap(_bmp, 1, "always", true);
2 `7 y1 A8 \4 S* w' D_root["paste_mc"+depth]._x = _xmouse;
; e1 Y) p0 W  |; W6 m8 Q_root["paste_mc"+depth]._y = _ymouse; ' X1 M- x2 X5 i
depth++;
% k. Z+ w2 j) _}
1 G8 Y$ H( N  b7 v//这是右键菜单的设置
, s/ \& j$ d! q0 W! j1 Z_menu.hideBuiltInItems();
' F0 r; L; |8 h' N& Nvar copy_menu:ContextMenuItem = new ContextMenuItem("复制", copy_func);
& T$ z$ L. d3 `var paste_menu:ContextMenuItem = new ContextMenuItem("粘贴", paste_func);
6 N- g8 b0 C5 Dpaste_menu.enabled = false;
8 y) x: `+ F  k0 S_menu.customItems.push(copy_menu, paste_menu);
6 l" [, j$ w% u0 H5 k& K, Tthis.menu = _menu;2 M) w1 t1 a# Y! L
源文件下载:点击这里下载源文件
草根,不是为了草根而草根;
草根,是手段,不是目的,脱颖而出才是目的!

草根站长论坛一定是你脱颖而出的必选的平台!
请帮助宣传/支持草根站长网.草根站长网是一个需要理解的地方,适宜长期居住!

TOP

发新话题