/ / Jak poprawnie tworzyć klipy filmowe we FlashDevelop - flash, actioncript-3, null, movieclip, flashdevelop

Jak prawidłowo tworzyć klipy filmowe we FlashDevelop - flash, Actionscript-3, null, movieclip, flashdevelop

Próbuję dowiedzieć się, dlaczego podczas tworzenia klipu filmowego w programie flashdevelop, wspomniany klip wideo zawsze kończy się zerową wartością.

Oto kod, którego próbuję użyć:

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.Bitmap;

public class Rain extends MovieClip
{
[Embed(source = "../../../../../lib/images/icons/drop.png")]
private var Drop: Class;

private var offset:int = 50;
private var dropsNumber:int;
private var dropsVector:Vector.<MovieClip> = new Vector.<MovieClip>();

public var drop:MovieClip;

public function init(drops:int, fallSpeed:int, windSpeed:int, hArea:int, vArea:int, dir:String):void
{
dropsNumber = drops;

if (dir == "right")
{
offset *= -1;
}

for (var i:int = 0; i < drops; i++)
{
drop = new Drop() as MovieClip;

drop.fallSpeed = fallSpeed;
drop.windSpeed = windSpeed;
drop.dir = dir;
drop.hArea = hArea;
drop.vArea = vArea;

drop.x = Math.random() * (hArea + offset);
drop.y=Math.random()*vArea;

//

drop.scaleX = Math.round(((Math.random() * 1) + 0.3) * 10) / 10;
drop.scaleY=drop.scaleX;

//

dropsVector.push(drop);

addChild(drop);
}

inTheDirection();
}

private function inTheDirection():void
{
for (var i:int = 0; i < dropsNumber; i++)
{
switch (dropsVector[i].dir)
{
case "left" :

dropsVector[i].addEventListener(Event.ENTER_FRAME, moveLeft);

break;

case "right" :

dropsVector[i].scaleX*=-1;
dropsVector[i].addEventListener(Event.ENTER_FRAME, moveRight);

break;

default :

trace("There is some error dude...");
}
}
}

private function moveLeft(e:Event):void
{
e.target.x-=e.target.windSpeed;
e.target.y+=Math.random()*e.target.fallSpeed;

if (e.target.y>e.target.vArea+e.target.height)
{
e.target.x = Math.random() * (e.target.hArea + (offset * 2));
e.target.y=- e.target.height;
}
}

private function moveRight(e:Event):void
{
e.target.x+=e.target.windSpeed;
e.target.y+=Math.random()*e.target.fallSpeed;

if (e.target.y>e.target.vArea+e.target.height)
{
e.target.x = Math.random() * (e.target.hArea - offset * 2) + offset * 2;//Check
e.target.y=- e.target.height;
}
}
}

Ma rysować krople deszczu na ekranie, aby uzyskać efekt deszczu, ale pojawia się ten błąd:

**[Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference.
Fault, Rain.as:32**

Rozejrzałem się bezskutecznie. Każda pomoc jest bardzo mile widziana!

Dzięki!

Odpowiedzi:

2 dla odpowiedzi № 1

Problem polega na tym, że Twoja klasa Drop jest mapą bitową. Nie może mieć właściwości dodawanych dynamicznie.

Łatwym rozwiązaniem jest utworzenie pustych klipów filmowych i plikówdodaj do tego swoją kroplę. Lepszym rozwiązaniem jest napisanie niestandardowej klasy dla Twojego Drop, która będzie miała potrzebne właściwości. Ale ponieważ poprosiłeś tylko o łatwą naprawę, spróbuj tego:

drop = new MovieClip();
drop.addChild(new Drop());

To powinno zastąpić:

drop = new Drop() as MovieClip; // replace this line

Lepszym rozwiązaniem jest utworzenie klasy, która rozszerza Bitmap o takie właściwości, jakie chcesz:

package
{
import flash.display.Bitmap;
import flash.display.BitmapData;

/**
* ...
* @author ...
*/

[Embed(source = "../../../../../lib/images/icons/drop.png")]
private var DropArt: Class;
public var fallSpeed;
public var windSpeed;
public var dir;
public var hArea;
public var vArea;

public class  Drop extends Bitmap
{
var art:Bitmap  = new DropArt();
this.bitmapData = art.bitmapData;
}

}

-1 dla odpowiedzi № 2
  1. W AS możesz dodać niestandardowe właściwości do MovieClips, więc nie musisz tworzyć własnej klasy.
  2. Zastępujesz to samo wystąpienie drop w pętli for, co może nie być przydatne.

Usuń to:

private var Drop: Class;

Usuń to:

public var drop:MovieClip;

W pętli for użyj tego:

var drop = new MovieClip();

Jeśli potrzebujesz kropli, utwórz tablicę i wepchnij do niej krople.

Mam nadzieję, że właśnie tego szukasz, powodzenia, Obrabować