2014-02-01 19 views
0

Я пытаюсь сделать программу, которая пульсирует в такт песни, с волновым рисунком сверху, но волновая картина, кажется, стоит за всем. Я знаю, как изменить индекс дочернего элемента, добавленного на сцену, но я не знаю, как установить значение индекса для графического объекта. Вот мой код (если применимо):Flash AS3: Как изменить Z-индекс построенной графики?

import flash.display.Sprite; 
import flash.display.Graphics; 
import flash.events.Event; 
import flash.media.Sound; 
import flash.media.SoundChannel; 
import flash.media.SoundMixer; 
import flash.net.URLRequest; 
import flash.utils.ByteArray; 
import flash.text.TextField; 

var snd:Sound = new Sound(); 
var req:URLRequest = new URLRequest("SuperHexagonMusic.mp3"); 
var channel:SoundChannel; 

stage.addEventListener(Event.ENTER_FRAME, everyFrame); 

snd.load(req); 
channel = snd.play(); 
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 

function everyFrame(event:Event):void 
{ 
    pulse.alpha = channel.leftPeak * 3; 
    var bytes:ByteArray = new ByteArray(); 
    const PLOT_HEIGHT:int = 200; 
    const CHANNEL_LENGTH:int = 256; 

    SoundMixer.computeSpectrum(bytes, false, 0); 

    var g:Graphics = this.graphics; 

    g.clear(); 

    g.lineStyle(0, 0x000000); 
    g.beginFill(0x000000); 
    g.moveTo(0, PLOT_HEIGHT); 

    var n:Number = 0; 

    for (var i:int = 0; i < CHANNEL_LENGTH; i++) 
    { 
     n = (bytes.readFloat() * PLOT_HEIGHT); 
     g.lineTo(i * 2.5, PLOT_HEIGHT - n); 
    } 

    g.lineTo(CHANNEL_LENGTH * 2.5, PLOT_HEIGHT); 
    g.endFill(); 

    g.lineStyle(0, 0xFFFFFF); 
    g.beginFill(0xFFFFFF, 0.5); 
    g.moveTo(CHANNEL_LENGTH * 2.5, PLOT_HEIGHT); 

    for (i = CHANNEL_LENGTH; i > 0; i--) 
    { 
     n = (bytes.readFloat() * PLOT_HEIGHT); 
     g.lineTo(i * 2.5, PLOT_HEIGHT - n); 
    } 

    g.lineTo(0, PLOT_HEIGHT); 
    g.endFill(); 
} 

function onPlaybackComplete(event:Event):void 
{ 
    stage.removeEventListener(Event.ENTER_FRAME, everyFrame); 
} 

Что я надеюсь на это сконструированный волнообразные быть на вершине импульса, но текущий код выдает этот результат:

На изображении вы можете увидеть конец волнового шаблона, выпячивающегося за пульсом.

Итак, вкратце: Как я могу принести этот волновой рисунок на передний план?

ответ

0

Родители Graphics всегда находятся за детьми всех родителей. Вы должны сделать себе еще один объект Sprite или Shape, поместите его поверх своего списка отображения и нарисуйте его графику.

var spectrum:Shape=new Shape(); 
addChild(spectrum); // if last added, will be on top 
function everyFrame(e:Event):void { 
    var g:Graphics=spectrum.graphics; // that's all you need to change! 
    // the rest of code follows 
} 
+0

Это работает! Спасибо! – user3259554

Смежные вопросы