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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-08-2007, 01:10   #1 (permalink)
tino
 
Benutzerbild von naturtrueb
 
Registriert seit: Mar 2005
Beiträge: 27
onit - hilfe zur code optimierung

erstmal hallo. ich bin der tino und bin etwas aufgeregt - ich glaub
ich poste hier zum ersten mal was sinnvolles nach 2 jahren mitlesen
und ca. 1000 suchanfragen.

hier der stand der dinge :onit v5
(glaub es geht nur mit ziel speichern unter)

KURZ: es geht um ein spiel - ähnlich asteroids nur besser - dessen
code etwas unorganisiert ist - suche nach besserer organisation um evtl.
mit interessierten leuten gemeinsam dran zu arbeiten


ich habe vor kurzen ein projekt gestartet um mich selbst etwas zu bewegen
mehr in AS einzusteigen - wie geht das besser als mit einem spiel...

ich selbst bin designstudent - daher bin ich eher an einer intelligenten art
der eingabe und steuerung interessiert als an perfektem code. BIS JETZT...

ich bin schon stolz auf mich das sich mein schiff schon recht gut bewegt und
noch alles ganz flüssig läuft. aber ich habe natürlich auch schon viele andere
spiele codes und überhaupt codes gesehen - die auf mich nen besseren eindruck
gemacht haben - warum weiß ich noch nicht genau und hoffe es in diesem thread
mir beibringen zu können - als gegenleistung fuer eure tips gibts nat. meinen code
und eine hoffentlich sinnvolle weiterentwicklung von diesem.

ich wäre euch dankbar wenn ihr mir ersteinmal bei der code organisation weiter
helfen könnt - so das im idealfall der ein oder andere von euch ein feature hinzucoden
kann.


ich selbst habe noch nen haufen ideen die ich in diesem projekt umsetzen will (mapscroll,
turbulenz des schiffes, schadensmodell, kollisionsabfrage, pausetaste, gegner ki, das ganze
zu land-wasser-luft-weltall)

bin sehr gespannt auf eure antoworten. und hoffe das eure guten ideen (von denen ich
schon so viele gelesen und 20% verstanden habe) mir nicht den spass verderben

steuerung W A S D , Q = booster, zielen mit maus
man braucht ein "schiff" und ein "visier" derzeit AS2

PHP-Code:
//-------------Onit----------------
//------------VARIABLEN still--------------------
//START bewegungsrichtung, position, rotation
schiff._x 100;
schiff._y 100;
ISTfaktorX 0;
ISTfaktorY 0;
//geschwindigkeit des schiffes
speed 10;
//Boostwerte max, refillspeed, status
boostMAX 20;
boostREF 2;
boostSTATUS 20;
//wie traege ist das schiff (bzw wie schwer) - wasser 150 - All 60
traegheit 60;
//wie weit kann man zielen
sichtweite 100;
//bremskraft des schiffes - wasser 0.001 - all 0.0001
bremskraft 0.0001;
//wie lang ist das _alpha fenster (0 = lang , 10 = sehr kurz)
nebel 0.4;
//schifflaenge - durch rotation sonst verfälscht
schifflaenge schiff._width;
//schifffocus für eingabe
schiff._focusrect false;
schiff.tabEnabled true;
schiff.focusEnabled true;
Selection.setFocus(schiff);





//---------------ON ENTER FRAME function----------------
schiff.onEnterFrame = function() {
    
//----------------test ausgaben-----------------------
    
test1.text "boost= " Math.round(boostSTATUS);
    
test2.text lesefps;
    
//======================KARTE=====================
    // schiffposition von oben links aus in prozent 0.0 bis 1.0
    //schiffXpozt = schiff._x / Stage.width;
    //schiffYpozt = schiff._y / Stage.height;

    //ausrichten der Karte
    //karteneuY = Math.round(schiffYpozt * (Stage.height - karte._height));
    //karteneuX = Math.round(schiffXpozt * (Stage.width - karte._width));
    //karte._y += (karteneuY -karte._y)/120;
    //karte._x += (karteneuX -karte._x)/120;
    //=============SCHIFF STEUERUNG=====================
    //------------VARIABLEN dynamisch--------------------
    //entfernungen x y
    
distanzX Math.abs(_root._xmouse this._x);
    
distanzY Math.abs(_root._ymouse this._y);
    
//genauer abstand zur maus
    
distanzR Math.round(Math.sqrt(distanzX distanzX distanzY distanzY));
    
//--------schiff nach maus ausrichten--------------    
    
SOLLrotation Math.atan2(_root._ymouse this._y_root._xmouse this._x) / Math.PI 180;
    if (
mausausrichten == true) {
        
//winkel differenz ausrechnen immer kleine als 180 pos. und neg.
        
winkeldiff = function (ab) {
            var 
diff a;
            if (
diff 180) {
                
diff = -(360 diff);
            } else if (
diff < -180) {
                
diff 360 diff;
            }
            return 
diff;
        };
        
this._rotation += (winkeldiff(this._rotationSOLLrotation)) / (traegheit 10);
    }
    
//--------------------VISIER---------------------------             
    
Mouse.hide();
    
visier._rotation SOLLrotation;
    
//position
    
if (distanzR >= schifflaenge) {
        
visier._x _xmouse;
        
visier._y _ymouse;
        
visier._alpha 100;
    } else {
        
//das visier kann nicht ueber das schiff fahren a = c * cos(beta); alpha = 90-beta; b=c*cos(alpha)
        //visier._x = _xmouse + (schifflaenge - distanzR) * Math.cos(this._rotation * Math.PI / 180);
        //visier._y = _ymouse + (schifflaenge - distanzR) * Math.cos((90 - this._rotation) * Math.PI / 180);
    
}
    
//sichtweite & nebel
    
if (distanzR >= sichtweite) {
        
visier._alpha 100 - ((distanzR sichtweite) * nebel);
    } else if (
distanzR <= schifflaenge 20) {
        
visier._alpha 100 - ((20 - (distanzR schifflaenge)) / 10);
    } else {
        
visier._alpha 100;
    }
    
    
    
//--------------TASTENSTEUERUNG----------------------                                
    
if (beschleunigen == true) {
        
//------------Festlegen der richtungsfaktoren----------------
        //------------beim press von W (87)-------------------
        
if (Key.isDown(87) && Key.isDown(65) == false && Key.isDown(68) == false) {
            
SOLLfaktorX Math.sin((this._rotation 90) * Math.PI 180);
            
SOLLfaktorY Math.sin(this._rotation Math.PI 180);
        }
        
//------------beim press von S (83)-------------------                                                                   
        
if (Key.isDown(83)) {
            
SOLLfaktorX = -Math.sin((this._rotation 90) * Math.PI 180);
            
SOLLfaktorY = -Math.sin(this._rotation Math.PI 180);
        }
        
//------------beim press von A (65)-------------------                                                                   
        
if (Key.isDown(65) && Key.isDown(87) == false && Key.isDown(68) == false) {
            
SOLLfaktorX Math.sin((this._rotation) * Math.PI 180);
            
SOLLfaktorY Math.sin((this._rotation 90) * Math.PI 180);
        }
        
//------------beim press von D (68)-------------------                                                                   
        
if (Key.isDown(68) && Key.isDown(87) == false && Key.isDown(65) == false) {
            
SOLLfaktorX = -Math.sin((this._rotation) * Math.PI 180);
            
SOLLfaktorY = -Math.sin((this._rotation 90) * Math.PI 180);
        }
        
//------------beim press von W & D (68)-------------------                                                                   
        
if (Key.isDown(87) && Key.isDown(68)) {
            
SOLLfaktorX = -Math.sin((this._rotation 45) * Math.PI 180);
            
SOLLfaktorY Math.sin((this._rotation 45) * Math.PI 180);
        }
        
//------------beim press von W & A (68)-------------------                                                                   
        
if (Key.isDown(87) && Key.isDown(65)) {
            
SOLLfaktorX Math.sin((this._rotation 45) * Math.PI 180);
            
SOLLfaktorY Math.sin((this._rotation 45) * Math.PI 180);
        }
        
//---------------beschleunigen--------------                                                                       
        
ISTfaktorX += (SOLLfaktorX ISTfaktorX) / traegheit;
        
ISTfaktorY += (SOLLfaktorY ISTfaktorY) / traegheit;

        
this._x += ISTfaktorX speed;
        
this._y += ISTfaktorY speed;
        if (
this._xscale 95){
        
this._xscale -=0.2;
        
this._yscale -=0.2;
        }

    }
    
//-----BOOST--beim press von Q (81)----BOOST----------      
    //booster AUS - refill
    
if (boostSTATUS boostMAX && Key.isDown(81) == false) {
        
boostSTATUS += boostREF;
    }
    
//booster AN      
    
if (boost == true) {
        
SOLLfaktorX Math.sin((this._rotation 90) * Math.PI 180) * 2;
        
SOLLfaktorY Math.sin(this._rotation Math.PI 180) * 2;

        
ISTfaktorX += (SOLLfaktorX ISTfaktorX) / (traegheit 2);
        
ISTfaktorY += (SOLLfaktorY ISTfaktorY) / (traegheit 2);

        
this._x += ISTfaktorX * (speed);
        
this._y += ISTfaktorY * (speed);
        
        if (
this._xscale 92){
        
this._xscale -=0.8;
        
this._yscale -=0.8;
        }

        if (
boostSTATUS <= 2) {
            
boost false;
            
abbremsen true;
            
reibung bremskraft;
        } else {
            
boostSTATUS -= 2;
        }
    }
    
//abbremsen                                                        
    
if (abbremsen == true) {
        if (
this._xscale 100){
        
this._xscale +=0.4;
        
this._yscale +=0.4;
        }

        
ISTfaktorX /= reibung;
        
ISTfaktorY /= reibung;

        
this._x += ISTfaktorX speed;
        
this._y += ISTfaktorY speed;
        
reibung += bremskraft;

        if (
Math.abs(ISTfaktorX) < 0.02 && Math.abs(ISTfaktorY) < 0.02) {
            
abbremsen false;
            
turbulenz true;
            
turbulenzneuwerte();
        }
    }
    
updateAfterEvent();
};
//---------------WENN TASTE GEDRÜCKT-------------- 
schiff.onKeyDown = function() {
    if (
kollision == false && (Key.isDown(87) || Key.isDown(83) || Key.isDown(65) || Key.isDown(68))) {
        
beschleunigen true;
        
abbremsen false;
        
turbulenz false;
    }
    if (
Key.isDown(81) && boostSTATUS && kollision == false) {
        
boost true;
        
beschleunigen false;
        
abbremsen false;
        
turbulenz false;
    }
};
//---------------WENN TASTE LOSGELASSEN-------------- 
schiff.onKeyUp = function() {
    if (
Key.isDown(87) == false && Key.isDown(83) == false && Key.isDown(65) == false && Key.isDown(68) == false && Key.isDown(81) == false) {
        
beschleunigen false;
        
boost false;
        
abbremsen true;
        
//reset der reibung
        
reibung bremskraft;
    }
};

//------------------ENDE--------(c)-tino söffing------------ 
__________________
www.buntbunt.de

Geändert von naturtrueb (05-08-2007 um 01:22 Uhr)
naturtrueb ist offline   Mit Zitat antworten
Alt 05-08-2007, 16:20   #2 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Bist Du sicher, daß das AS2 ist?
Du hast die Variablen ja noch nicht mal typisiert.
Das hinter dem Doppelpunkt ist die Typisierung.

var ISTfaktorX:Number = 0;

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 05-08-2007, 16:25   #3 (permalink)
tino
 
Benutzerbild von naturtrueb
 
Registriert seit: Mar 2005
Beiträge: 27
mh ja also AS2 in jedem fall.

wusste das es diese sache mit num,string und array gibt- aber da es auch ohne geht wusst ich nicht recht wofür ich des machen sollte
__________________
www.buntbunt.de
naturtrueb ist offline   Mit Zitat antworten
Alt 05-08-2007, 16:40   #4 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Zitat:
Zitat von naturtrueb Beitrag anzeigen
wusste das es diese sache mit num,string und array gibt- aber da es auch ohne
geht wusst ich nicht recht wofür ich des machen sollte
Nennt sich Typisierung und es ist nicht nur für Number, String und Array sondern für alle Typen.
Der Vorteil liegt darin, daß man sauberer programmieren muß und von Flash Fehlermeldungen
bekommt, wenn Typen nicht zueinander passen, was die Fehlersuche erleichtert.

Typisierung ist essentiell in AS2. Abgesehen davon ist AS2 eigentlich auch Klassenbasiert, siehe
-> http://de.wikipedia.org/wiki/ActionS...ActionScript_2

Von daher würde ich sagen, daß Dein Code eher AS1 ist, auch wenn Du ihn mit der AS2-Einstellung exportiert haben solltest.

gruß, gaspode

Geändert von gaspode (05-08-2007 um 16:42 Uhr)
gaspode ist offline   Mit Zitat antworten
Alt 05-08-2007, 16:48   #5 (permalink)
tino
 
Benutzerbild von naturtrueb
 
Registriert seit: Mar 2005
Beiträge: 27
ja genau deswegen bin ich hier

dein tipp wäre also - das ich nun erstmal das teil was da oben zu sehen ist in sinnvolle klassen zu zerlegen - und extern als .as zu speichern und dann in meiner fla diese klassen zu nutzen ?
wenn ja würde ich mich ueber ein kleines beispiel anhand meines codes freuen
__________________
www.buntbunt.de
naturtrueb ist offline   Mit Zitat antworten
Alt 09-08-2007, 12:39   #6 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Unterhaching/München
Beiträge: 513
das gefühl fürs raumschiff kommt schon rüber. ich würde dir aber raten,
den schritt mit externen AS klassen alleine mit hilfe der Flash Hilfe oder
dem Forum hier zu gehen.

Wenn es dann Probleme mit dem generellen Aufbau gibt, meld dich wieder
und du bekommst bestimmt mehr antworten. das jetzt jemand her geht und
deinen code umstrickt, ist nur schülern in den ferien möglich

gruß,
dr.ache
malthoff ist offline   Mit Zitat antworten
Alt 09-08-2007, 12:52   #7 (permalink)
tino
 
Benutzerbild von naturtrueb
 
Registriert seit: Mar 2005
Beiträge: 27
ja danke- das dachte ich mir auch "wer hat da schon lust zu"

wenns was neues gibt werde ich es posten - bin auch nicht andauernt an dem projekt dran , ist ja leider auch nur hobby
__________________
www.buntbunt.de
naturtrueb ist offline   Mit Zitat antworten
Alt 04-02-2008, 13:14   #8 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Unterhaching/München
Beiträge: 513
und, was ist draus geworden?
malthoff ist offline   Mit Zitat antworten
Alt 05-02-2008, 12:38   #9 (permalink)
tino
 
Benutzerbild von naturtrueb
 
Registriert seit: Mar 2005
Beiträge: 27
hehe

also die beschleunigung und rotation findet sich nun hier wieder www.npire.de

weiterhin eine endlose welt und eine landefunktion

ich hoffe ich finde die zeit im naechsten jahr das alles weiter zu entwickeln
__________________
www.buntbunt.de
naturtrueb ist offline   Mit Zitat antworten
Alt 05-02-2008, 13:04   #10 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Unterhaching/München
Beiträge: 513
cool.
interessanter head. parallax scrolling gefällt sehr gut.
landen funktioniert bei mir nicht und der sound der triebwerke
nervt nach zu kurzer zeit.

aber weitermachen !
malthoff 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:22 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele