Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-05-2008, 18:59   #1 (permalink)
Neuer User
 
Registriert seit: May 2008
Beiträge: 7
Unhappy Brauche hilfe bei Kolisionsabfrage

Hi Leute,
Ich hab ein Problem!!
Ich arbeite gerade an einem RPG-Stick-Game.
Fragt mich bitte nicht was das heißt , aber ich weiß jedenfalls,dass das ein Flash-Game ist bei dem man alles von oben sieht und rummrennen kann.
Nun habe ich meinen Strichmenchen (Die Hauptfigur,mit der man rummrennen kann) den skript:
Zitat:
function moveobject()
{
if(Key.isDown(Key.RIGHT)){
stick._x = stick._x + 2;
}
if(Key.isDown(Key.LEFT)){
stick._x = stick._x - 2;
}
if(Key.isDown(Key.UP)){
stick._y = stick._y - 2;
}
if(Key.isDown(Key.DOWN)){
stick._y = stick._y + 2;
}
}

setInterval(moveobject,50);
gegeben.
Ich habe auch schon einen Ausschnitt von einer Stadt von oben eingefügt.
Da ich aber nicht möchte,dass das Strichmenchen einfach über alles Laufen kann dachte ich ich muss dorthin, wo das Strichmänchen nicht hinlaufen darf ein Movieclip einfügen...
Leider weiß ich nicht was für ein skript dort hinmuss.
Ich ahne zwar, dass der skript so anfangen muss
Zitat:
if(_root.stick.hitTest(_root.Movieclip))
....
leider hab ich keine ahnung was dann kommen muss!!

Wichtig ist noch
der Skript muss in Actionscript 1 oder 2 geschrieben sein!!!


im Vorhinein schon Tausend Dank!!!!
-Mani ist offline   Mit Zitat antworten
Alt 18-05-2008, 22:04   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Post

hi und willkommen im flashforum,
je nachdem was du vor hast macht es mit hitTest keinen sinn!
schau dir doch mal die tutorials auf folgenden seiten näher an. das könnt was für dich sein:
http://www.tonypa.pri.ee/tbw/
http://oos.moxiecode.com/

anbei ein bsp. script wie man das mit hitTest lösen könnte.
du wirst allerdings schnell festellen das es recht ungenau ist und zudem noch weitere nachteile mit sich bringt.

PHP-Code:
//-------------------------------------

stop();

//-------------------------------------

var stickSpeed:Number 1;

var 
hitTestObjHolder:Array = new Array(wall_leftwall_rightwall_topwall_bottomhit1hit2hit3hit4hit5hit6hit7);

//-------------------------------------

function moveObject(obj:MovieClipxDir:NumberyDir:Number):Void {
    
    
obj._x += xDir;
    
obj._y += yDir;

    if(
getHitTest(obj)) moveObject(obj, -xDir, -yDir);
    
}

//-------------------------------------

function getHitTest(obj:MovieClip):Boolean {

    for(var 
str:String in hitTestObjHolder) if(obj.hitTest(hitTestObjHolder[str])) return true;
    
    return 
false;

}

//-------------------------------------

function getKeys():Void {
    
    if (
Key.isDown(Key.RIGHT)) moveObject(stickstickSpeed0);
    if (
Key.isDown(Key.LEFT))  moveObject(stick, -stickSpeed0);
    if (
Key.isDown(Key.UP))    moveObject(stick0, -stickSpeed);
    if (
Key.isDown(Key.DOWN))  moveObject(stick0stickSpeed);
    
}

//-------------------------------------

setInterval(getKeys1);

//------------------------------------- 
ich hab dein script einfach erweitert und weil wir im achtionscript2 bereich sind etwas mehr as2 like umgetextet.
fla und swf hab ich dir einfach mal mit dazu gepackt

cheers, sal
Angehängte Dateien
Dateityp: zip moveAround.zip (6,9 KB, 26x aufgerufen)
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (18-05-2008 um 22:49 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 18-05-2008, 22:47   #3 (permalink)
Neuer User
 
Registriert seit: May 2008
Beiträge: 7
Thumbs up thanks

Hey DANKE!!!!!
Du bist echt ein Spetialist
-Mani ist offline   Mit Zitat antworten
Alt 18-05-2008, 22:54   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
kein prob.
ich hab das script aber nochmal etwas optimiert...
saugste also am besten nochmal neu die files

zudem funktioniert das so im moment nur mit quadratischen formen. das bringt halt der klassische hitTest so mit sich. man könnte das ganze noch etwas verbessern wenn man mit bitmapData objects arbeitet und dort den hitTest abfragt

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Alt 18-05-2008, 22:56   #5 (permalink)
Neuer User
 
Registriert seit: May 2008
Beiträge: 7
Cool cool

hey danke noch mal für die schnelle Hilfe!!
Hätte ja nie gedacht das ich so schnell ne Antwort bekomm!!!

Also ciao!!
-Mani ist offline   Mit Zitat antworten
Alt 19-05-2008, 01:23   #6 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Post

hey ho,
ich hatte bock drauf das mit einem bitmapData hitTest auszuprobieren. das ganze läuft ganz gut. das ergebnis will ich dir nicht vorenthalten.
es gibt gleich mehrere vorteile dabei!
zum einen ist man nicht mehr drauf angewiesen nur quadratische fomen zu benutzen und zum anderen ist das ganze etwas genauer geworden...

PHP-Code:
//-------------------------------------

stop();

//-------------------------------------

import flash.display.BitmapData;
import flash.geom.Point;

//-------------------------------------

var stageHolder:MovieClip;
var 
moveSpeed:Number;
var 
hitTestObjHolder:Array;
var 
hitTestObjLinkIDs:Array;
var 
character:MovieClip;
var 
characterBMP:BitmapData;
var 
characterPoint:Point;

//-------------------------------------

function initApp():Void {
    
    
stageHolder this.createEmptyMovieClip("stageHolder"this.getNextHighestDepth());//erzeugt den movieclip in den alle anderen movieclpis abgelegt werden
    
moveSpeed 1;//die geschwindigkeit vom character. vorsicht. je hoeher die zahl, umso ungenauer ist die kollisionsabfrage!
    
hitTestObjHolder = new Array();//generiert ein array in dem die bitmapData objecte abgelegt werden
    
hitTestObjLinkIDs = new Array("enviPNG""envi_objsPNG");//hier werden die bilder (verlinkungsname in der bib) eingetragen die hindernisse sein sollen

    
buildPlayer("charPNG");//erzeugt den player movieclip. hier die verlinkung aus der bib mit uebergeben. pos vom player wird festgelegt
    
buildHitObjs();//erzeugt die hinderniss objekte
    
    
setInterval(getKeys1);//die tastenagfrage. 1 ist der speed. je hoeher die zahl umso langsamer ist die bewegung

}

//-------------------------------------

function buildPlayer(img:String):Void {

    
characterPoint = new Point();
    
characterBMP BitmapData.loadBitmap(img);

    
character stageHolder.createEmptyMovieClip("character"stageHolder.getNextHighestDepth());
    
character.attachBitmap(characterBMPcharacter.getNextHighestDepth());
    
character._x Stage.width 2;
    
character._y Stage.height 2;
    
}

//-------------------------------------

function buildHitObjs():Void {

    var 
bmp:BitmapData;

    for (var 
str:String in hitTestObjLinkIDs) {
        
        
bmp BitmapData.loadBitmap(hitTestObjLinkIDs[str]);
    
        
hitTestObjHolder.push(bmp);
    
        
stageHolder.attachBitmap(bmpstageHolder.getNextHighestDepth());
        
    }

}

//-------------------------------------

function moveObject(obj:MovieClipxDir:NumberyDir:Number):Void {
    
    
obj._x += xDir;
    
obj._y += yDir;

    if (
getHitTest(obj)) moveObject(obj, -xDir, -yDir);
    
}

//-------------------------------------

function getHitTest(obj:MovieClip):Boolean {

    var 
hitObj:BitmapData;

    
characterPoint.character._x;
    
characterPoint.character._y;
    
    for (var 
str:String in hitTestObjHolder) {
        
        
hitObj BitmapData(hitTestObjHolder[str]);

        if (
hitObj.hitTest(new Point(hitObj.rectangle.xhitObj.rectangle.y), 255characterBMPcharacterPoint)) return true;
        
    }
    
    return 
false;

}

//-------------------------------------

function getKeys():Void {
    
    if (
Key.isDown(Key.RIGHT)) moveObject(charactermoveSpeed0);
    if (
Key.isDown(Key.LEFT))  moveObject(character, -moveSpeed0);
    if (
Key.isDown(Key.UP))    moveObject(character0, -moveSpeed);
    if (
Key.isDown(Key.DOWN))  moveObject(character0moveSpeed);
    
}

//-------------------------------------

initApp();

//------------------------------------- 
ich hab das ganze script noch ein bissal aufgebohrt. es koennen mehrere bilder hinzugefügt werden die als hinderniss fungieren sollen... die entsprechenden codezeilen sind kommentiert.

die fla ist leider zu groß zum uppen.
einfach den code in eine leere fla einfügen und dort in der bib ein png24 für den player und 2 png24s für die hindernisse einfügen...

cheers, sal
Angehängte Dateien
Dateityp: zip moveAround02.zip (17,6 KB, 33x aufgerufen)
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (19-05-2008 um 01:39 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 19-05-2008, 17:41   #7 (permalink)
Neuer User
 
Registriert seit: May 2008
Beiträge: 7
Thumbs up wahnsinn

BoAAA hey!!
Du hast es voll drauf!!!
danke ey!!!

Hast du das ganze swf nur für mich gemacht??????

voll nett!

sers
-Mani ist offline   Mit Zitat antworten
Alt 27-05-2008, 01:56   #8 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Post

moin,
direkt für dich hab ichs nicht geschraubt
du hast mich aber auf die idee gebracht mal wieder in diese richtung zu experimentieren.

ich hab das ganze grad auch noch was weitergesponnen und auch hier möchte ich dir/euch das ergebnis nicht vorenthalten!

swf und fla gibts weiter unten mit dazu...

man kann jetzt beliebig viele gegner platzieren!
die gegner verhalten sich in diesme bsp. alleridings noch ziemlich primitv:
PHP-Code:
buildEnemy("enemPNG"150500); 
-parameter 1 = der verknüpnfungsname in der bib
-parameter 2 = x
-parameter 3 = y
-parameter 4 = rotation

der folgende as code ist nur an ganz wenigen stellen kommentiert.
in der function "initApp" ist alles genau beschrieben wie man weitere gegner hinzufügt, bzw. wie gegner, spieler und envi aussehen usw.
hier der code part 1:
PHP-Code:
//-------------------------------------

stop();

//-------------------------------------

import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.geom.Matrix;

//-------------------------------------

var stageHolder:MovieClip;
var 
moveSpeed:Number;
var 
hitTestEnviHolder:Array;
var 
hitTestEnemyHolder:Array;
var 
hitTestObjLinkIDs:Array;
var 
character:MovieClip;
var 
characterSpeed:Number;
var 
characterOBJ:Object;
var 
enemy:MovieClip;
var 
enemySpeed:Number;
var 
enemyInterval:Number;

//-------------------------------------

function initApp():Void {

    
stageHolder this.createEmptyMovieClip("stageHolder"this.getNextHighestDepth());//erzeugt den movieclip in den alle anderen movieclpis abgelegt werden
    
moveSpeed 1;//die geschwindigkeit vom character. vorsicht. je hoeher die zahl, umso ungenauer ist die kollisionsabfrage!
    
hitTestEnviHolder = new Array();//generiert ein array in dem die envi bitmapData objecte abgelegt werden
    
hitTestEnemyHolder = new Array();//generiert ein array in dem die enemy bitmapData objecte abgelegt werden
    
hitTestObjLinkIDs = new Array("enviPNG""envi_objsPNG");//hier werden die bilder (verlinkungsname in der bib) eingetragen die hindernisse sein sollen
    
characterSpeed 1;//der speed mit dem sich der character bewegt. je kleiner die zahl umso schneller. keine komma zahlen
    
enemySpeed 7;//der speed mit dem sich die gegner bewegen. je kleiner die zahl umso schneller. keine komma zahlen
    
    //beachten. player sowie gegner duerfen initial nicht so platziert werden, dass sie einen hitTest ausloesen. das gilt für objecte und das envi
    
buildEnemy("enemPNG"150500);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"8001045);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"50052090);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"750500180);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"300500133);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"200660270);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"350660233);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"250280191);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildPlayer("charPNG");//erzeugt den player movieclip. hier die verlinkung aus der bib mit uebergeben. pos vom player wird festgelegt
    
    
buildHitObjs();//erzeugt die hinderniss objekte
    
controlEnemys();//bewegt die gegner
    
    
setInterval(controlCharactercharacterSpeed);//die tastenagfrage. 1 ist der speed fuer den player. je hoeher die zahl umso langsamer ist die bewegung
    
    
mc_fps.swapDepths(10000);//setzt die fps anzeige über alle anderen display elemnte

}

//-------------------------------------

function buildEnemy(img:StringxPos:NumberyPos:Numberrot:Number):Void {
    
    var 
obj:Object;
    
    var 
enemyBMP:BitmapData BitmapData.loadBitmap(img);

    
enemy stageHolder.createEmptyMovieClip("enemy"stageHolder.getNextHighestDepth());
    
enemy.attachBitmap(enemyBMPenemy.getNextHighestDepth());
    
enemy._x xPos;
    
enemy._y yPos;

    
obj = new Object();
    
obj.mc enemy;
    
obj.bmp enemyBMP;
    
obj.bmpSource BitmapData.loadBitmap(img);
    
obj.enemy._x;
    
obj.enemy._y;
    
obj.xDir null;
    
obj.yDir null;
    
obj.objPos = new Object();
    
obj.hitChar false;

    
hitTestEnemyHolder.push(obj);
    
    
drawBitmap(objrot);
    
}

//-------------------------------------

function posEnemy():Object {

    var 
dirsArrAll:Array = new Array(-101);
    var 
dirsArrSmall:Array = new Array(-11);

    var 
objPos:Object = new Object();
        
objPos.xDir moveSpeed dirsArrAll[random(dirsArrAll.length)];
        
objPos.xDir == objPos.yDir moveSpeed dirsArrSmall[random(dirsArrSmall.length)] : objPos.yDir moveSpeed dirsArrAll[random(dirsArrAll.length)];
        
    return 
objPos;

}

//-------------------------------------

function controlEnemys():Void {

    var 
enemyObj:Object;

    
enemyInterval setInterval(function():Void {
    
        for (var 
str:String in hitTestEnemyHolder) {

            
enemyObj hitTestEnemyHolder[str];

            
enemyObj.objPos.xDir == null enemyObj.objPos posEnemy() : enemyObj.objPos enemyObj.objPos;
            
            
enemyObj.xDir enemyObj.objPos.xDir;
            
enemyObj.yDir enemyObj.objPos.yDir;

            
moveEnemy(enemyObjenemyObj.xDirenemyObj.yDir)
            
            if (
getHitTest(hitTestEnviHolderenemyObj) || getHitTest(hitTestEnemyHolderenemyObj)) {

                
moveEnemy(enemyObj, -enemyObj.xDir, -enemyObj.yDir);
                
                
enemyObj.objPos posEnemy();
                
            }

        }
    
    }, 
enemySpeed);

}

//------------------------------------- 
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (28-05-2008 um 02:05 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 27-05-2008, 01:59   #9 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Post

code part 2:
PHP-Code:
//-------------------------------------

function moveEnemy(enemyObj:ObjectxDir:NumberyDir:Number):Void {
    
    
enemyObj.+= xDir;
    
enemyObj.+= yDir;
                                                   
    
enemyObj.mc._x enemyObj.x;
    
enemyObj.mc._y enemyObj.y;

}

//-------------------------------------

function buildPlayer(img:String):Void {
    
    var 
characterBMP:BitmapData BitmapData.loadBitmap(img);

    
character stageHolder.createEmptyMovieClip("character"stageHolder.getNextHighestDepth());
    
character.attachBitmap(characterBMPcharacter.getNextHighestDepth());
    
character._x Stage.width 2;
    
character._y Stage.height 2;

    
characterOBJ = new Object();
    
characterOBJ.mc character;
    
characterOBJ.bmp characterBMP;
    
characterOBJ.bmpSource BitmapData.loadBitmap(img);
    
characterOBJ.character._x;
    
characterOBJ.character._y;
    
characterOBJ.xDir 0;
    
characterOBJ.yDir 0;

}

//-------------------------------------

function buildHitObjs():Void {
    
    var 
obj:Object;

    for (var 
str:String in hitTestObjLinkIDs) {
        
        
obj = new Object();
        
        
obj.bmp BitmapData.loadBitmap(hitTestObjLinkIDs[str]);
        
obj.0;
        
obj.0;
    
        
hitTestEnviHolder.push(obj);
    
        
stageHolder.attachBitmap(obj.bmpstageHolder.getNextHighestDepth());
        
    }

}

//-------------------------------------

function drawBitmap(obj:Objectrot:Number):Void {

    var 
objWidthHalf:Number obj.bmpSource.width 2;
    var 
objHeightHalf:Number obj.bmpSource.height 2;
    
    var 
degrees:Number rot;
    
    var 
angle Math.PI * (degrees 360);
    
    var 
rotationMatrix:Matrix = new Matrix();
        
rotationMatrix.translate(-objWidthHalf, -objHeightHalf);
        
rotationMatrix.rotate(angle);
        
rotationMatrix.translate(objWidthHalfobjHeightHalf);
        
    
rubberBitmap(obj);

    
obj.bmp.draw(obj.bmpSourcerotationMatrixnullnullnulltrue);

}

//-------------------------------------

function rubberBitmap(obj:Object):Void {

    
obj.bmp.fillRect(new Rectangle(00obj.bmpSource.widthobj.bmpSource.height), 0x00000000);
    
}

//-------------------------------------
    
function moveObject(obj:ObjectxDir:NumberyDir:Number):Void {
    
    
obj.+= xDir;
    
obj.+= yDir;
    
    
obj.mc._x obj.x;
    
obj.mc._y obj.y;
    
    
obj.xDir xDir;
    
obj.yDir yDir;

    if (
getHitTest(hitTestEnviHolderobj)) moveObject(obj, -xDir, -yDir);
    
}

//-------------------------------------

function getHitTest(arr:Array, obj:Object):Boolean {

    var 
hitObj:Object;

    var 
poi:Point = new Point(obj.xobj.y);

    for (var 
str:String in arr) {
        
        
hitObj Object(arr[str]);
        
        if (
hitObj != obj) {

            if (
hitObj.bmp.hitTest(new Point(hitObj.xhitObj.y), 255obj.bmppoi)) return true;
        
        }
        
    }
    
    return 
false;

}

//-------------------------------------

function controlCharacter():Void {

    if (
Key.isDown(Key.RIGHT)) moveObject(characterOBJmoveSpeed0);
    if (
Key.isDown(Key.LEFT))  moveObject(characterOBJ, -moveSpeed0);
    if (
Key.isDown(Key.UP))    moveObject(characterOBJ0, -moveSpeed);
    if (
Key.isDown(Key.DOWN))  moveObject(characterOBJ0moveSpeed);

    
characterOBJ.mc._alpha 100;
    
    if (
getHitTest(hitTestEnemyHoldercharacterOBJ)) characterOBJ.mc._alpha 25;
    
}

//-------------------------------------

initApp();

//------------------------------------- 
swf und fa gibts auch mit dazu.

viel spaß damit

cheers, sal
Angehängte Dateien
Dateityp: rar moveAround_flashforum.swf.rar (28,5 KB, 22x aufgerufen)
Dateityp: rar moveAround_flashforum_fla.rar (44,3 KB, 31x aufgerufen)
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (27-05-2008 um 02:42 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 27-05-2008, 02:35   #10 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
ich hab den thread mal verschoben
das ganze passt viel mehr zum thema spiele

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Alt 28-05-2008, 02:00   #11 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Post

nochmal optimiert und von altem balast befreit...
PHP-Code:
//-------------------------------------

stop();

//-------------------------------------

import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.geom.Matrix;

//-------------------------------------

var stageHolder:MovieClip;
var 
moveSteps:Number;
var 
hitTestEnviHolder:Array;
var 
hitTestEnemyHolder:Array;
var 
hitTestObjLinkIDs:Array;
var 
characterOBJ:Object;
var 
characterSpeed:Number;
var 
enemySpeed:Number;
var 
enemyInterval:Number;
var 
dirsArrAll:Array;
var 
dirsArrSmall:Array;

//-------------------------------------

function initApp():Void {

    
stageHolder this.createEmptyMovieClip("stageHolder"this.getNextHighestDepth());//erzeugt den movieclip in den alle anderen movieclpis abgelegt werden
    
moveSteps 1;//der weg der pro zeiteinheit in pix zurückgelegt wird. vorsicht. je hoeher die zahl, umso ungenauer ist die kollisionsabfrage!
    
hitTestEnviHolder = new Array();//generiert ein array in dem die envi bitmapData objecte abgelegt werden
    
hitTestEnemyHolder = new Array();//generiert ein array in dem die enemy bitmapData objecte abgelegt werden
    
hitTestObjLinkIDs = new Array("enviPNG""envi_objsPNG");//hier werden die bilder (verlinkungsname in der bib) eingetragen die hindernisse sein sollen
    
characterSpeed 1;//der speed mit dem sich der character bewegt. je kleiner die zahl umso schneller. keine komma zahlen
    
enemySpeed 7;//der speed mit dem sich die gegner bewegen. je kleiner die zahl umso schneller. keine komma zahlen
    
dirsArrAll = new Array(-101);//die richtungen in die sich die gegner bewegen koennen. 3 richtungen. links, stillstand, rechts
    
dirsArrSmall = new Array(-11);//die richtungen in die sich die gegner bewegen koennen. 3 richtungen. links, rechts
    
    //beachten. player sowie gegner duerfen initial nicht so platziert werden, dass sie einen hitTest ausloesen. das gilt für objecte und das envi
    
buildEnemy("enemPNG"150500);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"8001045);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"50052090);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"750500180);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"300500133);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"200660270);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"350660233);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildEnemy("enemPNG"250280191);//erzeugt gegner. hier die verlinkung aus der bib mit uebergeben. pos vom enemy wird festgelegt
    
buildPlayer("charPNG"Stage.width 2Stage.height 20);//erzeugt den player movieclip. hier die verlinkung aus der bib mit uebergeben. pos vom player wird festgelegt
    
    
buildEnviHitObjs();//erzeugt die hinderniss objekte
    
controlEnemys();//bewegt die gegner
    
    
setInterval(controlCharactercharacterSpeed);//die tastenagfrage. 1 ist der speed fuer den player. je hoeher die zahl umso langsamer ist die bewegung
    
    
mc_fps.swapDepths(10000);//setzt die fps anzeige über alle anderen display elemnte

}

//-------------------------------------

function buildEnemy(img:StringxPos:NumberyPos:Numberrot:Number):Void {
    
    var 
enemyBMP:BitmapData BitmapData.loadBitmap(img);
    
    var 
enemyOBJ:Object;

    
enemyOBJ = new Object();
    
enemyOBJ.mc stageHolder.createEmptyMovieClip("character"stageHolder.getNextHighestDepth());
    
enemyOBJ.mc.attachBitmap(enemyBMPcharacter.getNextHighestDepth());
    
enemyOBJ.mc._x xPos;
    
enemyOBJ.mc._y yPos;
    
enemyOBJ.bmp enemyBMP;
    
enemyOBJ.bmpSource BitmapData.loadBitmap(img);
    
enemyOBJ.xPos;
    
enemyOBJ.yPos;
    
    
enemyOBJ.objPos = new Object();
    
enemyOBJ.objPos.xDir null;
    
enemyOBJ.objPos.yDir null;
    
enemyOBJ.hitChar false;

    
drawBitmap(enemyOBJrot);
    
    
hitTestEnemyHolder.push(enemyOBJ);

}

//-------------------------------------

function posEnemy():Object {

    var 
objPos:Object = new Object();
        
objPos.xDir moveSteps dirsArrAll[random(dirsArrAll.length)];
        
objPos.xDir == objPos.yDir moveSteps dirsArrSmall[random(dirsArrSmall.length)] : objPos.yDir moveSteps dirsArrAll[random(dirsArrAll.length)];
        
    return 
objPos;

}

//-------------------------------------

function controlEnemys():Void {

    var 
enemyObj:Object;

    
enemyInterval setInterval(function():Void {
    
        for (var 
str:String in hitTestEnemyHolder) {

            
enemyObj hitTestEnemyHolder[str];

            
enemyObj.objPos.xDir == null enemyObj.objPos posEnemy() : enemyObj.objPos enemyObj.objPos;

            
moveEnemy(enemyObjenemyObj.objPos.xDirenemyObj.objPos.yDir)

            if (
getHitTest(hitTestEnviHolderenemyObj) || getHitTest(hitTestEnemyHolderenemyObj)) {

                
moveEnemy(enemyObj, -enemyObj.objPos.xDir, -enemyObj.objPos.yDir);
                
                
enemyObj.objPos posEnemy();
                
            }

        }
    
    }, 
enemySpeed);

}

//-------------------------------------

function moveEnemy(enemyOBJ:ObjectxDir:NumberyDir:Number):Void {
    
    
enemyOBJ.mc._x enemyOBJ.+= xDir;
    
enemyOBJ.mc._y enemyOBJ.+= yDir;

}

//-------------------------------------

function buildPlayer(img:StringxPos:NumberyPos:Numberrot:Number):Void {

    var 
characterBMP:BitmapData BitmapData.loadBitmap(img);

    
characterOBJ = new Object();
    
characterOBJ.mc stageHolder.createEmptyMovieClip("character"stageHolder.getNextHighestDepth());
    
characterOBJ.mc.attachBitmap(characterBMPcharacter.getNextHighestDepth());
    
characterOBJ.mc._x xPos;
    
characterOBJ.mc._y yPos;
    
characterOBJ.bmp characterBMP;
    
characterOBJ.bmpSource BitmapData.loadBitmap(img);
    
characterOBJ.xPos;
    
characterOBJ.yPos;

    
drawBitmap(characterOBJrot);
    
}

//-------------------------------------

function buildEnviHitObjs():Void {
    
    var 
obj:Object;

    for (var 
str:String in hitTestObjLinkIDs) {
        
        
obj = new Object();
        
        
obj.bmp BitmapData.loadBitmap(hitTestObjLinkIDs[str]);
        
obj.0;
        
obj.0;
    
        
hitTestEnviHolder.push(obj);
    
        
stageHolder.attachBitmap(obj.bmpstageHolder.getNextHighestDepth());
        
    }

}

//-------------------------------------

function drawBitmap(obj:Objectrot:Number):Void {

    var 
objWidthHalf:Number obj.bmpSource.width 2;
    var 
objHeightHalf:Number obj.bmpSource.height 2;

    var 
angle:Number Math.PI * (rot 360);
    
    var 
rotationMatrix:Matrix = new Matrix();
        
rotationMatrix.translate(-objWidthHalf, -objHeightHalf);
        
rotationMatrix.rotate(angle);
        
rotationMatrix.translate(objWidthHalfobjHeightHalf);
        
    
rubberBitmap(obj);

    
obj.bmp.draw(obj.bmpSourcerotationMatrixnullnullnulltrue);

}

//-------------------------------------

function rubberBitmap(obj:Object):Void {

    
obj.bmp.fillRect(new Rectangle(00obj.bmpSource.widthobj.bmpSource.height), 0x00000000);
    
}

//-------------------------------------
    
function moveCharacter(obj:ObjectxDir:NumberyDir:Number):Void {
    
    
obj.mc._x obj.+= xDir;
    
obj.mc._y obj.+= yDir;
    
    
obj.xDir xDir;
    
obj.yDir yDir;

    if (
getHitTest(hitTestEnviHolderobj)) moveCharacter(obj, -xDir, -yDir);
    
}

//-------------------------------------

function getHitTest(arr:Array, obj:Object):Boolean {

    var 
hitObj:Object;

    var 
objPoi:Point = new Point(obj.xobj.y);

    for (var 
str:String in arr) {
        
        
hitObj Object(arr[str]);

        if (
hitObj != obj && hitObj.bmp.hitTest(new Point(hitObj.xhitObj.y), 255obj.bmpobjPoi)) return true;
        
    }
    
    return 
false;

}

//-------------------------------------

function controlCharacter():Void {
    
    
//get keys
    
if (Key.isDown(Key.RIGHT)) moveCharacter(characterOBJmoveSteps0);
    if (
Key.isDown(Key.LEFT))  moveCharacter(characterOBJ, -moveSteps0);
    if (
Key.isDown(Key.UP))    moveCharacter(characterOBJ0, -moveSteps);
    if (
Key.isDown(Key.DOWN))  moveCharacter(characterOBJ0moveSteps);
    
    
//set hit
    
characterOBJ.mc._alpha 100;
    
    if (
getHitTest(hitTestEnemyHoldercharacterOBJ)) characterOBJ.mc._alpha 25;
    
}

//-------------------------------------

initApp();

//------------------------------------- 
einfach den alten code in der letzten fla mit diesem hier ersetzen und fertig.

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (28-05-2008 um 02:08 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 28-05-2008, 20:00   #12 (permalink)
gebrauchter user
 
Registriert seit: Jul 2001
Ort: Austria
Beiträge: 200
cooles ding hast du da zusammengeschraubt. :-)
sehr effizient und funktioniert perfekt.
Ich brauch zwar momentan soetwas nicht, aber wenn ich an meiner homepage weiterbastle und ein paar andere bewegliche chars dabeihaben will, werd ich mich davon inspirieren lassen.
Rocco ist offline   Mit Zitat antworten
Alt 05-06-2008, 01:41   #13 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
jup, nach dem ersten Anschauen/Ausprobieren find ich's auch nicht schlecht.
__________________
Say no to Internet Explorer 6!
Circushund ist offline   Mit Zitat antworten
Alt 05-06-2008, 09:30   #14 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Post

ja denn hau ich nochmal 'ne neue version raus
hatte da die tage noch was weiter drann geschraubt. ist jetzt immer noch nicht opti, aber es gibt ein paar neue features.

-schiessen. mit strg.
-envi eraser. geh durch wände und veränder die landschaft. mit der entf taste wärend man sich bewegt zu gebrauchen.

ein bsp. ist weiter unten mit dabei.

cheers, sal
Angehängte Dateien
Dateityp: zip moveAround11_flashforum_swf.zip (30,0 KB, 52x aufgerufen)
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Alt 12-06-2008, 16:13   #15 (permalink)
AS-Newb
 
Registriert seit: May 2006
Ort: Berlin
Beiträge: 15
wow wie genial ist das denn?
lustig, dass man jetzt auch aus der welt entfliehen und alles "aufräumen" kann
cidic ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele