AS3: Parameter child must be non-null - actionscript-3

doing augmented reality app tut from YouTube. I'm newbie at this whole FLARTool kit and papervision staff. Eternal gratitude to the helpers.
i've got this script:
package
{
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import org.libspark.flartoolkit.core.FLARCode;
import org.libspark.flartoolkit.core.param.FLARParam;
import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
import org.libspark.flartoolkit.support.pv3d.FLARBaseNode;
import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
[SWF(width="640", height="480", frameRate="30", backgroundColor="#ffffff")]
public class test extends Sprite
{
[Embed(source="marker15.pat", mimeType="application/octet-stream")]
private var marker:Class;
[Embed(source="camera_para.dat", mimeType="application/octet-stream")]
private var cam_params:Class;
//createFLAR variables
private var ar_params:FLARParam;
private var ar_marker:FLARCode;
//createCam variables
private var ar_vid:Video
private var ar_cam:Camera
//createBMP vairiables
private var ar_bmp:BitmapData;
private var ar_raster:FLARRgbRaster_BitmapData;
private var ar_detection:FLARSingleMarkerDetector;
//createPapervision variables
private var ar_scene:Scene3D;
private var ar_3dcam:org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
private var ar_basenode:FLARBaseNode;
private var ar_viewport:Viewport3D;
private var ar_renderengine:BasicRenderEngine;
private var ar_transmat:FLARTransMatResult;
private var ar_cube:Cube;
public function test()
{
createFLAR();
createCam();
createBMP();
createPapervision();
addEventListener(Event.ENTER_FRAME, loop);
}
public function createFLAR()
{
ar_params= new FLARParam();
ar_marker= new FLARCode(16,16);
ar_params.loadARParam(new cam_params() as ByteArray);
ar_marker.loadARPatt(new marker());
}
public function createCam()
{
ar_vid= new Video(640, 480);
ar_cam= Camera.getCamera();
ar_cam.setMode(640,480,30);
ar_vid.attachCamera(ar_cam);
addChild(ar_vid);
}
public function createBMP()
{
ar_bmp= new BitmapData(640,480);
ar_bmp.draw(ar_vid);
ar_raster= new FLARRgbRaster_BitmapData(ar_bmp);
ar_detection= new FLARSingleMarkerDetector(ar_params, ar_marker,80);
}
public function createPapervision()
{
ar_scene= new Scene3D();
ar_3dcam= new org.libspark.flartoolkit.support.pv3d.FLARCamera3D(ar_params);
ar_basenode= new FLARBaseNode();
ar_renderengine= new BasicRenderEngine();
ar_transmat= new FLARTransMatResult();
var ar_light:PointLight3D= new PointLight3D();
ar_light.x= 1000;
ar_light.y= 1000;
ar_light.z= -1000;
var ar_bitmap:BitmapFileMaterial;
ar_bitmap=new BitmapFileMaterial ("LBP2.jpg");
ar_bitmap.doubleSided=true;
ar_cube=new Cube(new MaterialsList({all:ar_bitmap}), 80, 80, 80);
ar_scene.addChild(ar_basenode);
ar_basenode.addChild(ar_cube);
addChild(ar_viewport);
}
private function loop(e:Event):void
{
ar_bmp.draw(ar_vid);
ar_cube.rotationX +=4;
ar_cube.rotationY +=6;
try
{
if(ar_detection.detectMarkerLite(ar_raster, 80) && ar_detection.getConfidence()>0.5)
{
ar_detection.getTransformMatrix(ar_transmat);
ar_basenode.setTransformMatrix(ar_transmat);
ar_renderengine.renderLayers(ar_scene, ar_3dcam, ar_viewport);
}
}
catch (e:Error){}
}
}
}
when i'm running test I'm getting this log:
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChild()
at test/createPapervision()[C:\Users\Omer Hacohen\Adobe Flash Builder 4.7\test\src\test.as:103]
at test()[C:\Users\Omer Hacohen\Adobe Flash Builder 4.7\test\src\test.as:58]
what does it means? No need to tell the application does open the camera but the cube that supposed to sit on the marker does not appear

You are recieving the error because of the following line in the createPapervision method:
addChild(ar_viewport);
From your posted code, you're never initializing that variable (ar_viewport), so it's null when you try to add it.
Try this:
ar_viewport = new Viewport3D(stage.stageWidth,stage.stageHeight);
addChild(ar_viewport);

Related

StageVideoAvailabilityEvent not found

Im Working on Air Application and heres my Class
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageDisplayState;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.StageVideoAvailabilityEvent;
import flash.geom.Rectangle;
import flash.media.StageVideo;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
public class presentation extends Sprite
{
private const VIDEO_FILE_URL:String = "assets/Presentation_Demo_02.mp4";
private var video:Video;
private var stageVideo:StageVideo;
private var nc:NetConnection;
private var ns:NetStream;
private var streamClient:Object;
public function presentation()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//stage.displayState = StageDisplayState.FULL_SCREEN;
addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(event:Event):void
{
trace("All Works");
initStream();
removeEventListener(Event.ADDED_TO_STAGE,init);
stage.addEventListener(Event.RESIZE, stageResize);
addEventListener(Event.ENTER_FRAME,update);
}
private function initStream():void
{
streamClient = new Object();
streamClient.onMetaData = onMetaData;
nc = new NetConnection();
nc.connect(null);
ns = new NetStream(nc);
ns.client = streamClient;
addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY,onChange);
}
private function onChange(event:StageVideoAvailabilityEvent):void
{
trace(event.availability);
}
private function stageResize(event:Event):void
{
}
private function update(event:Event):void
{
}
public function onMetaData(e:Object):void
{}
}
}
on the line where addEventListener for StageVideoAvailabilityEvent i got Error in Flash Builder
Type was not found or was not a compile-time constant: StageVideoAvailabilityEvent.
what can i do
Be sure that you are using a version of Adobe AIR that supports StageVideo. (I recommend you to download the latest version, 17).
Update your Adobe AIR Application Description file to the respective AIR version. (in this case 17)
<application xmlns="http://ns.adobe.com/air/application/17.0">
Also, be sure that you add an extra compiler argument to indicate the respective SWF version (fro AIR 17, should be 28:
-swf-version=28

AS3: ReferenceError: Error #1069:

I'm trying to load a sound file into my Flash project. I keep getting this error however.
ReferenceError:
Error #1069: Property COMPLETE not found on flash.events.Event and there is no default value. at LoadSND/soundLoaded()[C:\Users\Admin\Desktop\Final Project\LoadSND.as:38]
The relevant code:
package {
import flash.events.*;
import flash.media.*;
import flash.net.URLRequest;
public class LoadSND {
//declare variables
private var sndTrack: Sound;
private var sndChannel: SoundChannel;
private var sndVolume: Number;
private var newTrack: String;
private var canRepeat: Boolean;
public function LoadSND(myTrack: String, myRepeat: Boolean = true) {
// constructor code
// set a default volume and track
sndVolume = 0.5;
setTrackData(myTrack, myRepeat);
}
private function loadSound(): void {
// first stop all old sounds playing
SoundMixer.stopAll();
// create a new sound for the track and a new sound channel
sndTrack = new Sound();
sndChannel = new SoundChannel();
// load the required sound
sndTrack.load(new URLRequest(newTrack));
// when loaded – play it;
sndTrack.addEventListener(Event.COMPLETE, soundLoaded);
}
private function soundLoaded(Event): void {
// finished with this listener so remove it
sndTrack.removeEventListener(Event.COMPLETE, soundLoaded);
// call the play sound function
playSound();
}
private function playSound(): void {
// assign music to the musicChannel and play it
sndChannel = sndTrack.play();
// setting the volume control property to the sound channel
sndChannel.soundTransform = new SoundTransform(sndVolume, 0);
// but add this one to make repeats
sndChannel.addEventListener(Event.SOUND_COMPLETE, playAgain);
}
private function playAgain(Event): void {
// remove this listener and repeat playSound()
sndChannel.removeEventListener(Event.SOUND_COMPLETE, playAgain);
playSound();
}
private function setTrackData(myTrack: String, myRepeat: Boolean): void {
// update the new track information
newTrack = myTrack;
canRepeat = myRepeat;
// and load it
loadSound();
}
private function setVolumeLevel(Number): void {
}
} //end class
} //end package
Loading a default track through my Main.as
package {
import flash.display.MovieClip;
import flash.text.TextField;
import flash.display.SimpleButton;
import flash.utils.Dictionary;
import flash.text.TextFormat;
import flash.net.*;
import flash.events.*;
import fl.controls.*;
import flash.media.*;
import fl.events.ComponentEvent;
import fl.managers.StyleManager;
import fl.data.DataProvider;
import fl.data.SimpleCollectionItem;
import fl.managers.StyleManager;
import fl.events.ComponentEvent;
import flash.events.Event;
import flash.net.SharedObject;
import LoadSWF;
import GameButton;
import LoadSND;
public class Main extends MovieClip {
//Sound Variables
private var MAX_TRAX: int = 7;
private var MAX_SFX: int = 9;
private var sndPath: String;
private var sndTrack: LoadSND;
private var isMuted: Boolean;
private var canRepeat: Boolean;
private var sndVolume: Number;
public function Main() {
// constructor code
sndPath = "musicSFX/Fury.mp3";
isMuted = false;
sndTrack = new LoadSND(sndPath, canRepeat);
}
Any help is appreciated :) Thanks
The problem lies in the definition of soundLoaded function. You put just class in there instead of argument with type declaration. It should be solved if you adjust definition of the soundLoaded function in the following way:
private function soundLoaded(event:Event): void
By the way same problem is in functions playAgain and setVolumeLevel.

Implicit coercion of a value of type String to an unrelated type BitmapData

I'm new to PaperVision3d and FLARToolkit (and AS3 generally). I'm doing a tut on youtube on how to create a augmented reality app. I'm getting a error
Function does not have a body.
and
return value for function 'loop' has no type declaration.
on the private function loop. I really cant figure what I am doing wrong. PLZ HELP!!
the code
package
{
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import org.libspark.flartoolkit.core.FLARCode;
import org.libspark.flartoolkit.core.param.FLARParam;
import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
import org.libspark.flartoolkit.support.alternativa3d.FLARCamera3D;
import org.libspark.flartoolkit.support.pv3d.FLARBaseNode;
import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
[SWF(width="640", height="480", frameRate="30", backgroundColor="#ffffff")]
public class testweb extends Sprite
{
[Embed(source="earth.pat", mimeType="application/octet-stream")]
private var marker:Class;
[Embed(source="camera_para.dat", mimeType="application/octet-stream")]
private var cam_params:Class;
//createFLAR variables
private var ar_params:FLARParam;
private var ar_marker:FLARCode;
//createCam variables
private var ar_vid:Video
private var ar_cam:Camera
//createBMP vairiables
private var ar_bmp:BitmapData;
private var ar_raster:FLARRgbRaster_BitmapData;
private var ar_detection:FLARSingleMarkerDetector;
//createPapervision variables
private var ar_scene:Scene3D;
private var ar_3dcam:org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
private var ar_basenode:FLARBaseNode;
private var ar_viewport:Viewport3D;
private var ar_renderengine:BasicRenderEngine;
private var ar_transmat:FLARTransMatResult;
private var ar_cube:Cube;
public function testweb()
{
createFLAR();
createCam();
createBMP();
createPapervision();
addEventListener(Event.ENTER_FRAME, loop);
}
public function createFLAR()
{
ar_params= new FLARParam();
ar_marker= new FLARCode(16,16);
ar_params.loadARParam(new cam_params() as ByteArray);
ar_marker.loadARPatt(new marker());
}
public function createCam()
{
ar_vid= new Video(640, 480);
ar_cam= Camera.getCamera();
ar_cam.setMode(640,480,30);
ar_vid.attachCamera(ar_cam);
addChild(ar_vid);
}
public function createBMP()
{
ar_bmp= new BitmapData(640,480);
ar_bmp.draw(ar_vid);
ar_raster= new FLARRgbRaster_BitmapData(ar_bmp);
ar_detection= new FLARSingleMarkerDetector(ar_params, ar_marker,80);
}
public function createPapervision()
{
ar_scene= new Scene3D();
ar_3dcam= new org.libspark.flartoolkit.support.pv3d.FLARCamera3D(ar_params);
ar_basenode= new FLARBaseNode();
ar_renderengine= new BasicRenderEngine();
ar_transmat= new FLARTransMatResult();
var ar_light:PointLight3D= new PointLight3D();
ar_light.x= 1000;
ar_light.y= 1000;
ar_light.z= -1000;
var ar_bitmap:BitmapFileMaterial;
ar_bitmap=new BitmapFileMaterial ("LBP2.jpg");
ar_bitmap.doubleSided=true;
ar_cube=new Cube(new MaterialsList({all:ar_bitmap}), 80, 80, 80);
ar_scene.addChild(ar_basenode);
ar_basenode.addChild(ar_cube);
addChild(ar_viewport);
}
private function loop(e:Event);void
{
ar_bmp.draw(ar_vid);
ar_cube.rotationX +=4;
ar_cube.rotationY +=6;
try
{
if(ar_detection.detectMarkerLite(ar_raster, 80) && ar_detection.getConfidence()>0.5)
{
ar_detection.getTransformMatrix(ar_transmat);
ar_basenode.setTransformMatrix(ar_transmat);
ar_renderengine.renderLayers(ar_scene, ar_3dcam, ar_viewport);
}
}
catch (e:Error){}
}
}
}
It looks like a typo. In the row
private function loop(e:Event);void
change semicolon to colon like this:
private function loop(e:Event):void
Change
private function loop(e:Event);void
to
private function loop(e:Event):void

NetStream Info Returning 0's (Icecast Stream)

I've searched high and low for a fix to this issue, but cannot find ANYTHING on why almost all the properties are being returned as 0.
I am using FLV wrapping to pull a live audio stream from Icecast (since Adobe, 15 years later, still haven't fixed their live audio memory leak issue). It works great, everything functions perfectly.
However, I'm wanting to create a bandwidth monitor (for my iPhone port, and for my normal Flash player)... But whenever I retrieve netStreamInfo it returns as 0! For dataBytesPerSecond, audioBytesPerSecond, byteCount, dataByteCount, nearly EVERY SINGLE PROPERTY returns 0. I have this run on a 1-second timer.
Here's the total info output:
currentBytesPerSecond=0
byteCount=0
maxBytesPerSecond=0
audioBytesPerSecond=0
audioByteCount=0
videoBytesPerSecond=0
videoByteCount=0
dataBytesPerSecond=0
dataByteCount=0
playbackBytesPerSecond=16296.296296296296
droppedFrames=0
audioBufferLength=0.072
videoBufferLength=0
dataBufferLength=0
audioBufferByteLength=1540
videoBufferByteLength=0
dataBufferByteLength=0
srtt=0
audioLossRate=0
videoLossRate=0 Data Bytes Per Second
That output was about 5 minutes in. I noted the playBackBytesPerSecond never changed, and the audioBufferByteLength liked to switch between 1540 and 23xx randomly.
Can anyone pleaaase help me out here?
My actionscript:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.text.TextFieldAutoSize;
import flash.text.TextField;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.events.NetStatusEvent;
import flash.utils.Timer;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.media.SoundTransform;
import flash.display.Loader;
import flash.errors.IOError;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.net.NetStreamInfo;
import flash.utils.ByteArray;
import flash.media.*
public class soundContainer extends Sprite
{
public var slider:SliderMC = new SliderMC();
private var _video:Video;
private var _stream:NetStream;
private var _playbackTime:TextField;
private var _duration:uint;
private var _timer:Timer;
private var _soundChannel:SoundChannel;
public var audioTransform:SoundTransform = new SoundTransform();
public var _URL:String;
public var flvUrl:String = "s";
public var dragging:Boolean = false;
public var rectangle:Rectangle = new Rectangle(0,0,100,0);
private var ba:ByteArray;
private var bn;
public function soundContainer() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
public function init(e:Event):void
{
ba = new ByteArray();
slider.x = 73.85;
slider.y = 10.95;
addChild(slider);
slider.slider_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragIt);
stage.addEventListener(MouseEvent.MOUSE_UP, dropIt);
_timer = new Timer(1000);
_timer.addEventListener(TimerEvent.TIMER, onTimer);
_timer.start();
}
public function dragIt(e:MouseEvent):void
{
slider.slider_mc.startDrag(false, rectangle);
dragging = true;
slider.slider_mc.addEventListener(Event.ENTER_FRAME, adjustVolume);
}
public function dropIt(e:MouseEvent = null):void
{
if (dragging)
{
slider.slider_mc.stopDrag();
dragging = false;
}
}
public function adjustVolume(e:Event):void
{
var vol:Number = slider.slider_mc.x / 100;
var st:SoundTransform = new SoundTransform(vol);
SoundMixer.soundTransform = st;
}
public function playMyFlv(flvUrl)
{
_URL = flvUrl;
_video = new Video();
var connection:NetConnection = new NetConnection();
connection.connect(null);
_stream = new NetStream(connection);
_stream.soundTransform = audioTransform;
_stream.play(flvUrl);
var Client:Object = new Object();
_stream.client = Client;
_video.attachNetStream(_stream);
addChild(_video);
}
public function stopMyFlv()
{
SoundMixer.stopAll();
trace("stop");
try
{
_stream.close();
}
catch (error:IOError)
{
}
}
private function onNetStatus(e:NetStatusEvent)
{
}
private function onTimer(t:TimerEvent):Number
{
trace(_stream.info + " Data Bytes Per Second");
}
public function onIOError(e:IOError)
{
trace("Failed to load");
}
}
}

Build the connection between Arduino and Flex 4.0 via JSON

I try to make a connection between arduino and Flex 4.0, I added the JSON lib and also as3corelib.swc to Flex. When I run the Flex file the connection between PC to arduino is working (I can see it in SERPROXY window) and also I don't have any problems in Flex window, I added the SWF file of Flex to the list at //http://www.macromedia.com/support/documentation/tr/flashplayer/help/settings_manager04.html, Bu the reading result is not shows in the SWF, I couldn't understand why !, thanks for help
and here the code
package
{
import com.adobe.serialization.json.JSON;
//http://www.macromedia.com/support/documentation/tr/flashplayer/help/settings_manager04.html
import flash.display.Sprite;
import flash.errors.*;
import flash.events.*;
import flash.net.Socket;
import flash.text.TextField;
public class deneme extends Sprite
{
private var magnetic:Socket=new Socket("localhost",5331);
private var magneticValue:Number=0;
private var distance:Number;
private var newText:TextField=new TextField();
private var listText:TextField=new TextField();
private var MNx:Number;
private var MNy:Number;
private var MNz:Number;
private var d:Object={"x":null, "y":null, "z":null};
public function deneme()
{
socketDataHandler();
}
private function socketDataHandler():void
{
newText.text=magnetic.readUTFBytes(magnetic.bytesAvailable);
d= JSON.decode(newText.text);
MNx=d["x"];
MNy=d["y"];
MNz=d["z"];
listText.x=10;
listText.y=10;
listText.width=600;
listText.height=100;
listText.text=newText.text;
addChild(newText);
}
}
}
package
{ import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.errors.*;
import flash.events.*;
import flash.net.Socket;
import flash.text.TextField;
import mx.rpc.events.ResultEvent;
public class deneme2 extends Sprite
{
private var newText:TextField=new TextField();
private var listText:TextField=new TextField();
private var magnetic:Socket=new Socket("localhost",5331);
private var MNx:Number;
private var MNy:Number;
private var MNz:Number;
private var d:Object={"x":null, "y":null, "z":null};
public function deneme2()
{
magnetic.addEventListener(ProgressEvent.SOCKET_DATA,getDATA);
}
private function getDATA(event:ProgressEvent):void
{
newText.text=magnetic.readUTFBytes(magnetic.bytesAvailable);
d= JSON.decode(newText.text);
MNx=d["x"];
MNy=d["y"];
MNz=d["z"];
listText.x=10;
listText.y=10;
listText.width=600;
listText.height=100;
listText.text="X="+String(MNx)+" Y="+String(MNy)+" Z="+String(MNz);
addChild(listText);
}
}
}