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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-08-2010, 20:14   #121 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Vielen lieben dank Shin, werd ich mir gleich anguckn. Toll...


Also mit dem Index kämpf ich gerad.... aber was mich total zur verzweiflung bringt... das Movieclips die über X,Y bewegt wurden per Funktion....
plötzlich nicht mehr oben in der Timeline getweent werden können.
So als wären sie nicht mehr ansprachbar.
izanagi ist offline   Mit Zitat antworten
Alt 18-08-2010, 20:18   #122 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
ja das ist auch so. ein tween aus der ide wird durch as3 einfach verworfen. drum nehm ich die auch nur in den seltensten fällen.

ich denke es wäre wirklich am sinnvollsten, wenn deine gegner sich den weg (über ein paar festgelegte punkte) selbst suchen.
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 18-08-2010, 23:23   #123 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Uff,... ^^ klingt ziemlich cool, aber Nodes programmieren is ja wieder
so ne sache. Zudem meine Gegner nicht perspektivisch dargestellt werden.
Also keine drehungen. Falls du lust hast, kannst du mir ein Bausteinsystem
entwickeln mit dem man unsichtbare Nodes platziert, die dann in eine bestimmte
richtung transportiert. Also grafische Quadrate oder sowas.

Ich überweis dir gleich mal 20 Euro. Wenn du keine Zeit hast, dann lass
ich es erstmal bei den Pfaden.


So ich bin mal offline, genug für heute.
Ich hab jetzt viele neue Features....
Gegner schiessen, Gebäude schiessen, Energieanzeige für beide,
Dann werden Gegner nun, wenn sie Spielszene 1 verlassen
über einen Verteiler auf die nächsten Reihen in Spielszene 2 teleportiert.
Sitz ein Gegner gerade auf dem Platz, dann gibts Stau und der Gegner wartet
oder nimmt sich den nächsten freien. Somit kann es also vorkommen
das die Schlange von Szene 2 bis Szene 1 läuft.

Dann hab ich mein erstes KI System programmiert.
Per Programm Codes können Verhalten und Ereignisse erstellt werden.
Der Gegner merkt sich dein Verhalten, Welche Waffensysteme du
in der letzten Angriffswelle benuttz hast und welche Resistenzsysteme
installiert wurden. Je nachdem reagiert er für die nächste Welle demensprechend.

Ich habe leere Slots gemacht, die nach Programmstart mit Gegnern verdiedene Typs befüllt werden. Nach und nach per Random werden diese auf die Spielkarte geholt. Danach gibt es neue Gegner die in die SLots
kommen, jedoch diesmal abgestimmt auf die Spielweise des Spielers.
Der Computer wird also besser.
Sind die Slots leer, ist die Angriffswelle abgeschlossen.

EDIT: ah und ich hab ein Aggro verhalten den gegner gegeben, wenn sie von einer waffe getroffen werden gegen die er resistentist, rennt er und wird rot.
Erdbeben, Todesswelle, und paar sachen als KI programm

Geändert von izanagi (18-08-2010 um 23:39 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 19-08-2010, 22:13   #124 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Kleine frage, kann es sein das Date und Timer die gleichen Intervalle nutzen?
Das die zwei Funktionen zusammenhängen?

Ich hab den faktor der Uhrzeit erhöt auf 1200
Damit ich mein neues Wettersystem austesten kann ^^
Der Zeitraffe des Wetters, der in einer TimeEvent steckt, läuft aber
dementsprechend AUCH so schnell ab

Ich überleg ob ich noch per Random Regnen lassen soll.

Geändert von izanagi (19-08-2010 um 22:19 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 20-08-2010, 09:48   #125 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
na dann hast du es wohl mit deinem datum verknüpft. abgesehen davon, dass beide in millisekunden rechnen teilen die sich wohl nicht viel.
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 20-08-2010, 11:32   #126 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Eigentlich nicht, das ganze sieht so aus
PHP-Code:
wettertimer=new Timer(100,60);
wettertimer.addEventListener(TimerEvent.TIMERwetterstart);
wettertimer.addEventListener(TimerEvent.TIMER_COMPLETE wetterstop);
if (
uhrzeit.hours==6&&wetterstatus==6) {
    
wetterstatus=1;
    
regenrandom=1+int(Math.random()*40);
    if (
regenrandom==40&&regenaktiv!=true) {
        
regentimer.start();
        
spielkarte.regen.gotoAndPlay("regenstart");
        
regenaktiv=true;
    }
    
wettertimer.start();
} else if 
--------------------
    function 
wetterstart(e) {
        if (
uhrzeit.hours==6) {
            
wetterhelligkeit=wetterhelligkeit-0.0083;
            
wetterrot=wetterrot+0.016;
            
wettergrun=wettergrun-0.016;
            
wetterblau=wetterblau-0.016;
            
spielkarte.wetter.transform.colorTransform=new ColorTransform(wetterrot,wettergrun,wetterblau,wetterhelligkeit,0,0,0,0);
        }else if 
übrigends war ich sehr enttäuscht das ich das Wetter nicht
fortlaufend pro sekunde ändern kann.
Ich hab eine Schwarze Fläche über die Spielkarte gelegt,
diese wird tagsüber auf Alpha 0 und nachts alpha 80.
Jedoch zittert das Bild im ganzen, wie kleine grafik störungen.
Ich glaub der mag die änderungen des Alphas im 0.001 Bereich pro Sekunde nicht so ganz.
Jetzt habs ich so gemacht, das um 6 uhr, 8 uhr, 13 uhr und 21 uhr das wetter geändert wird. Tag und Nacht.
Zuerst hatte ich überlegt, ALLE Objekte abzudunkeln aber das ist ja auch
sinnlos und performence schlecht.
Die Schüsse leuchten in der Nacht ^^ weil sie über die schwarze fläche geaddet werden. Auch ein cooler effekt.

Naja viell hast du trotzdem ne bessere idee.

Geändert von izanagi (20-08-2010 um 11:37 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 20-08-2010, 12:29   #127 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
na da ist doch dein wetter von der uhrzeit abhängig, oder seh ich das falsch?

aber egal. was die performance angeht. das ist ganz klar, dass er so mehr zu machen hat. wenn sich dein wetter-mc ändert, muss ja die komplette karte neu gezeichnet werden und nicht nur, was sich gerade bewegt. alpha ist generell eine schwachstelle des flashplayers, daher könnte ich mir sogar vorstellen, dass die direkte colorTransform-variante für die performance günstiger sein könnte. sicher bin ich mir nicht.

nebenbei. wenn man bedenkt, dass 1/256 = 0,00390625 sind, scheinen 0,001 doch recht niedrig angesetzt. und trotzdem wird dein gesamter bildschirm neu berechnet, selbst wenn man nichts davon wahrnimmt. das haut natürlich rein. da würde ich den wert also eher erhöhen, aber den timer dafür mit nem höheren delay etwas langsamer arbeiten lassen.

EDIT: wenn du alle mcs ändern möchtest, musst du das ja nicht für jeden einzeln machen. die sind ja alle in der spielkarte, oder? dann reicht dieser eine mc.
__________________

flintfabrik.de

Geändert von shin10 (20-08-2010 um 12:34 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 20-08-2010, 13:18   #128 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Ja die 0.001 war nur daher gesagt
Berechnet wird es ja durch die Differenz
Um 6 Uhr morgends von Alpha 0.8 auf 0.3 bei 60xDelay transformiert
wären 0.8-0.3 / 60 = 0.0083 (pro delay)

Mit der Spielkarte hatte ich probiert, aber dann sind die Schüsse auch Dunkel,
weil die ja in der Karte generiert werden. Also klappt das nicht.

EDIT: ich könnt ja nochmal alles verschachteln, OMG aber dann werd ich wohl alles zerschiessen

Zitat:
na da ist doch dein wetter von der uhrzeit abhängig, oder seh ich das falsch?
Nicht abghäng, wird nur gestartet bei einer Uhrzeit. Aber der Timer ist ein eigener unabhängiger
Ich wollte nicht jeder änderung eine eigene Funktion geben, sondern nutzte Immer die selbe
nur das dort eine IF abfrage entscheidet ob wetter1,2,3 gespielt werden soll

Geändert von izanagi (20-08-2010 um 13:23 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 20-08-2010, 14:23   #129 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
hab mich ohnehin die ganze zeit schon gefragt, warum du "marker" benutzt um die verschiedenen typen von mcs sortiert auf die bühne zu setzen. warum nicht für jeden typ einen eigenen extra-mc als container?

ein wenig spät. ich weiß ...
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 20-08-2010, 15:40   #130 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
JEtzt kann ich dir nicht mehr folgen
Mit Typ meinst du die verschiednen reihenfolge der einzelnen Gegnertypen.

Ich versuch dir das mal zu veranschaulichen, ich geb dir hier mal die FLA
mit der spielkarte, viell verstehst du das dann.
DIe Logik dabei war einfach, das man unabhängig von der Programmierung, die Positionen bzw. den Index
von dem Grafischen Aufbau herleitet. Das heisst wenn ich die Marker unter einer Grafik setze, weil z.b. Ein Haus davor steht, dann läuft er auch hinter dem haus
und nicht vor dem Haus.
Ich setze also mit Grafikklötzen das Level zusammen, wie bei einem Leveleditor, kennst du sicher.
Angehängte Dateien
Dateityp: fla Aufbau.fla (718,0 KB, 4x aufgerufen)

Geändert von izanagi (20-08-2010 um 15:43 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 20-08-2010, 17:29   #131 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Ehm, ne ganz blöde frage,... wie machst du nen Tweener per AS ?
Etwa mit nem Timer und interval ?
Und noch etwas das ich bis heut nicht verstanden hab,
wozu ist das :void ?? ich habs bisher nie eingesetzt. Ich versteh auch die funktion dahinter nicht, mit der zurückgebende Leerwerte oder irrgendwie sowas -.-

Geändert von izanagi (20-08-2010 um 20:04 Uhr)
izanagi ist offline   Mit Zitat antworten
Alt 21-08-2010, 22:27   #132 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
also ich meinte eigentlich einen aufbau wie diesen. das level so durchstrukturieren, dass du alle gegner in einen extra mc legst, wie in einen unterordner und die gebäude wieder in den nächsten.

********╔═ Schüsse/GFX
********║ ├─ explosion0
********║ ├─ schuss1
********║ └─ schuss0
********║
********║
********╠═ Gegner
********║ ├─ gegner2
********║ ├─ gegner1
Level ══╣ └─ gegner0
********║
********║
********╠═ Gebäude
********║ ├─ gebäude2
********║ ├─ gebäude1
********║ └─ gebäude0
********║
********║
********╚═══ Karte ═══ ...

//verdammtes ding mit den leerzeichen

ok, dann gibt es aber noch die möglichkeit ohne unterordner:
PHP-Code:
var arr:Array = new Array();
for(var 
i:int 0meinLevel.numChildreni++){
    var 
mc:MovieClip meinLevel.getChildAt(i);
    
arr.push({obj:mcy:mc.y});
}

arr arr.sortOn("y", Array.NUMERIC | Array.DESCENDING);

for(var 
d:int 0arr.lengthd++){
    
meinLevel.setChildIndex(arr[d].obj0);

so werden deine mcs umsortiert. desto weiter oben er am bildschirm liegt, desto niedriger ist sein index. kostet natürlich etwas performance, aber die mcs können dann auch um ein haus rumlaufen etc.
leider würde das natürlich nicht funktionieren, wenn du an der pfadverschiebung festhältst, da die dann nicht mehr funktioniert.

was die tweens durch as angehen sind sie nicht unbedingt 100 %ig geeignet, bzw. ich würds wohl ein wenig anders machen. hast du schon nachgelesen? sonst kommen wir nochmal darauf zurück.
__________________

flintfabrik.de

Geändert von shin10 (21-08-2010 um 22:48 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 21-08-2010, 23:37   #133 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
zur void frage: wenn du das nicht mitangibst kommt es einem
PHP-Code:
function asdf():*{
    ...

gleich. die funktion könnte alles zurückgeben: mal nen string, integer, number, array ... ganz egal. mit void machst du klar, dass definitiv nichts zurückgegeben wird und wenn du ausversehen
PHP-Code:
function asdf():void{
    ...
}
var 
str:String asdf(); 
schreibst bringt dir der compiler einen fehler. ohne void funktioniert es aber str ist null.
lange rede kurzer sinn: man vermeidet fehler.


timer/interval ist nicht gut für das bewegen der spielfiguren. alles andere läuft ja auf frame basierend. nimm also am besten einen enterframe-listener und verschieb ihn jeweils um seine ihm zugewiesene laufgeschwindigkeit. die richtung wäre dann abhängig von ein paar checkpunkten. ich mach dir mal ein kleines beispiel. dauert ein wenig.
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 22-08-2010, 05:30   #134 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
ok, schau dir doch mal das hier an. ich hab noch keine kommentare dazu; nur das du mal einen eindruck bekommst. im grunde ist es eher noch einem partikelsystem, aber von gelegentlichen satelliten abgesehen...
mit der maus kannst du neue positionen bestimmen - wenn du shift, alt oder ctrl dabei drückst, wird der jeweils letzte gelöscht.
PHP-Code:
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.MovieClip;
import flash.geom.Point;

const 
CHECKPOINT_RADIUS:Number 10;
const 
PRUEF_TOLERANZ:Number 7;
function 
createCheckPoint():Sprite
{
    var 
sp:Sprite = new Sprite();
    
sp.graphics.beginFill(0xeeeeee1);
    
sp.graphics.drawCircle(0,0,PRUEF_TOLERANZ);
    
sp.graphics.endFill();
    
sp.graphics.lineStyle(10xaaaaaa);
    
sp.graphics.drawCircle(0,0,CHECKPOINT_RADIUS);
    
sp.graphics.lineStyle(20xdddddd);
    
sp.graphics.drawCircle(0,0,CHECKPOINT_RADIUS+PRUEF_TOLERANZ);

    
sp.Math.random() * stage.stageWidth;
    
sp.Math.random() * stage.stageHeight;

    var 
tf:TextField = new TextField();
    
tf.autoSize "left";
    
tf.text spur.length.toString();
    
sp.addChild(tf);

    
addChild(sp);

    return 
sp;
}

var 
spur:Array = new Array();
spur.push(createCheckPoint());
spur.push(createCheckPoint());
spur.push(createCheckPoint());

function 
clickHandler(e:MouseEvent):void
{
    if (
e.shiftKey || e.ctrlKey || e.altKey)
    {
        if (
spur.length 0)
        {
            
removeChild(spur.pop());
        }
    }
    else
    {
        var 
cp createCheckPoint();
        
cp.mouseX;
        
cp.mouseY;

        
spur.push(cp);
    }
}

stage.addEventListener(MouseEvent.CLICKclickHandler);

function 
spawn():void
{
    if (
spur.length >= 2)
    {
        var 
mc:MovieClip = new MovieClip();

        
mc.graphics.beginFill(Math.random()*0x00ffff1);
        
mc.graphics.drawCircle(003);
        
mc.graphics.endFill();

        
mc.spur[0].x;
        
mc.spur[0].y;

        
mc.nextCheckPointInList spur[1];
        
mc.nextCheckPoint = new Point(mc.nextCheckPointInList.x,mc.nextCheckPointInList.y).add(Point.polar(Math.random() * CHECKPOINT_RADIUS,Math.random() * Math.PI 2));

        
mc.angepeilteRichtung Math.atan2(mc.nextCheckPoint.mc.y,mc.nextCheckPoint.mc.x);
        
mc.richtung mc.angepeilteRichtung;
        
mc.geschwindigkeit Math.random() * 2;
        
mc.drehgeschwindigkeit .05 Math.random() * .2;
        
mc.alter 0;
        
mc.alterMax stage.frameRate 10;

        
mc.addEventListener(Event.ENTER_FRAMEenterFrameHandler);
        
addChild(mc);
    }
}
function 
getNextCheckPoint(mc:MovieClip):void
{
    
mc.nextCheckPointInList spur[spur.indexOf(mc.nextCheckPointInList) + 1];
    if (
mc.nextCheckPointInList != null && mc.nextCheckPointInList != undefined)
    {
        
mc.nextCheckPoint = new Point(mc.nextCheckPointInList.x,mc.nextCheckPointInList.y).add(Point.polar(Math.random() * CHECKPOINT_RADIUS,Math.random() * Math.PI 2));
    }
    else
    {
        
mc.nextCheckPoint null;
    }

}
function 
enterFrameHandler(e:Event):void
{
    var 
mc:MovieClip e.currentTarget as MovieClip;

    var 
posAlt:Point = new Point(mc.x,mc.y);
    if (
Point.distance(posAlt,mc.nextCheckPoint) <= PRUEF_TOLERANZ)
    {
        
getNextCheckPoint(mc);
    }
    if (
mc.nextCheckPoint == null || mc.nextCheckPoint == undefined)
    {
        
kill(mc);
        return;
    }


    
mc.angepeilteRichtung Math.atan2(mc.nextCheckPoint.mc.y,mc.nextCheckPoint.mc.x);

    var 
diff:Number mc.angepeilteRichtung mc.richtung;
    var 
diff2:Number mc.angepeilteRichtung mc.richtung;
    while (
diff Math.PI)
    {
        
diff = -Math.PI diff;
    }
    while (
diff < -Math.PI)
    {
        
diff Math.PI diff;
    }



    
mc.richtung mc.richtung diff mc.drehgeschwindigkeit;

    
mc.+=  mc.geschwindigkeit Math.cos(mc.richtung);
    
mc.+=  mc.geschwindigkeit Math.sin(mc.richtung);
    var 
posNeu:Point = new Point(mc.x,mc.y);

    if (
Point.distance(posAlt,mc.nextCheckPoint) <= Point.distance(posNeu,mc.nextCheckPoint))
    {
        
mc.posAlt.x;
        
mc.posAlt.y;
        
mc.drehgeschwindigkeit +=  .05;
    }

    
mc.alter++;
    if (
mc.alter >= mc.alterMax)
    {
        
kill(mc);
        return;
    }
}
function 
kill(mc:MovieClip):void
{
    
mc.removeEventListener(Event.ENTER_FRAMEenterFrameHandler);
    
removeChild(mc);
}

function 
tmTimerHandler(e:TimerEvent):void
{
    
spawn();
}
var 
tm:Timer = new Timer(20,0);
tm.addEventListener(TimerEvent.TIMERtmTimerHandler);
tm.start(); 
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 23-08-2010, 23:19   #135 (permalink)
Mediendesigner
 
Benutzerbild von izanagi
 
Registriert seit: Jan 2007
Ort: Köln
Beiträge: 418
Hi, war die Tage mal nicht Online. War in Köln auf der Gamescom
und noch n parr Termine. Also ich hab mir deinen Haufen arbeit
erstmal durchgelesen, hast dich mal wieder total ins Zeug gelegt du irrer

Zum Void erstmal, also mach nach jeder Funktion jetzt ein void dazu und gut ist ja ? Hab ja generell nur normale Funktionen und Event Funktionen.


Mit dem umsortieren, ist das eine Endlosfunktion?
Ich seh gerad den Überblick nicht was was ist oder spricht dein Code einfach alle Childrens an ? Viell kann ichs mal ausprobieren.


Zu deinem Mega Code, ich glaub das ist mir momentan zu hoch.
Ich werds nochmal in ruhe anschauen, aber ich bezweifel das ich
jetzt viel ändern kann... ich bin gerad fertig mit der Programmierung
und wollt mich an die Grafiken machen.
Ich hab 4.000 Zeilen nun programmiert in 4 wochen, da verstehst du
das ich was schiss hab jetzt alles durchzuwirbeln.

Wenns dein System auch anders geben würd, das man Grafikflächen
in das Level platzieren kann , die gegner darauf reagieren....
wäre es viell die Überlegung wert. Mal guckn
izanagi 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mehrere Kollisionen sparsam erstellen (Tower Defence Game) ?!? themerx Flash 8 5 29-10-2008 13:35
hilfe bei erstellung von tower defense flash cmdSoniq ActionScript 1 7 12-02-2008 15:17
Die ersten Schritte hunkarcelebi Flash Einsteiger 17 28-02-2006 21:12
ersten 3d schritte... Hamster2k Softwarearchitektur und Entwurfsmuster 35 21-10-2002 11:45
sound wird beim Preloader auf ersten dem ersten Frame geladen II werbe-grafix Flash 4 und Flash 5 1 18-12-2001 18:24


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

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


Copyright ©1999 – 2012 Marc Thiele