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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-04-2011, 14:31   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2011
Beiträge: 4
Statuspunkte-Verteiler

Hallo zusammen.

Ich bin noch ein Flasch-Neuling und möchte ein kleines Game bauen.


Uploaded with ImageShack.us
Mit diesem Bild möchte ich erklären wo ich hin möchte.
Ich habe eine gewisse Anzahl von Punkten, die mit hilfe von Plus- und Minus- Button auf Punkt 1 Bzw. Punkt 2 verteilt werden sollen. Das soll dann so sein, dass wenn Punkt 1 ativiert ist, nur darauf Punkte verteilt werden können. Wenn dann Punkt 2 aktiviert wird, soll sich Punkt 1 deaktivieren und die Punkte sollen nur auf Punkt 2 verteilbar sein und anderherum.

Mein Hauptproblem ist, dass ich nicht weiss wie ein switch zwischen den beiden Punkten (blau) realisieren kann

Ich hoffe es kann mir jemand helfen.
danke schon mal.

Geändert von Hotzn (11-04-2011 um 14:35 Uhr)
Hotzn ist offline   Mit Zitat antworten
Alt 11-04-2011, 15:49   #2 (permalink)
Rock'n'Bass
 
Benutzerbild von <sVkVmVit>
 
Registriert seit: Feb 2006
Ort: Hamburg
Beiträge: 202
Hi!

Ich nehme mal an, dass du damit ein ähnliches Punkte-System bauen willst wie auf diesem Foto, oder? (siehe link) --> http://ryl.cibmall.net/char_create.jpg
In DEM fall würde ich einfach für jeden Punkt jeweils einen Plus- und einen Minus-Button anlegen. Ist zudem auch klarer zu überblicken denke ich.
__________________
==>remix.nin.com<==
//
Life Is Too Short For Boring Music!
Fantasie ist die einzige Waffe gegen die Wirklichkeit.

Geändert von <sVkVmVit> (11-04-2011 um 15:52 Uhr)
<sVkVmVit> ist offline   Mit Zitat antworten
Alt 11-04-2011, 16:16   #3 (permalink)
Rock'n'Bass
 
Benutzerbild von <sVkVmVit>
 
Registriert seit: Feb 2006
Ort: Hamburg
Beiträge: 202
Und falls du es doch genau so haben willst, wie du meintest, dann hier einmal ein Code, den ich mal eben geschrieben hab. Natürlich solltest du dir das alles genau durchschauen, damit du's danach auch selbst machen könntest.

Erstelle in einem neuen Flashfilm mal 4 Movieclips und gebe denen folgende Instanznamen (in ihrem jeweiligen Eigenschaftenfenster): "plusbutton", "minusbutton", "punkt1" und "punkt2".
( Natürlich wäre es sinnvoll, wenn du deren Erscheinungsbild gleich so machst, wie du es willst. )
Dann kopiere ins selbe Schlüsselbild, in dem deine vier benannten Movieclips liegen, folgenden Code und teste das ganze das ganze mal mit STRG+ENTER.
Code:
stop();

var anz_punkte:Number = 2;
var aktiverpunkt:Number = 0;

_root.onMouseDown = function(){
	
	for (i=1; i<=anz_punkte; i++){
		if (_root["punkt"+i].hitTest(_root._xmouse, _root._ymouse)){
			aktiverpunkt = i;
			}
		if (_root.plusbutton.hitTest(_root._xmouse, _root._ymouse) && aktiverpunkt == i){
			trace("punkt"+i+" wird um 1 erhöht.");
			}
		if (_root.minusbutton.hitTest(_root._xmouse, _root._ymouse) && aktiverpunkt == i){
			trace("punkt"+i+" wird 1 abgezogen.");
			}
		}

}
Nun müsstest du auf einen beliebigen der beiden Punkte anklicken können und diesen anschließend per Klick auf plusbutton und minusbutton erhöhen oder erniedrigen können. (dass etwas passiert, siehst du im Ausgabefenster, das dann erscheinen sollte)
Da ich das ganze in einer for-Schleife angelegt habe, kannst du des weiteren nun auch mehr als nur zwei punkte erstellen (natürlich stets klar nummeriert!). Müsstest dann nur noch den Wert der Variablen anz_punkte entsprechend der Anzahl ändern.

EDIT: Ich weiß leider nicht, wie fitt du im Bereich "Programmieren" bist, von daher erkläre ich dir den Code bei Bedarf auch gerne nochmal im Einzelnen. Also einfach fragen, wenn was nicht so klar ist!

Lg Nils
__________________
==>remix.nin.com<==
//
Life Is Too Short For Boring Music!
Fantasie ist die einzige Waffe gegen die Wirklichkeit.

Geändert von <sVkVmVit> (11-04-2011 um 16:30 Uhr)
<sVkVmVit> ist offline   Mit Zitat antworten
Alt 12-04-2011, 08:16   #4 (permalink)
Neuer User
 
Registriert seit: Apr 2011
Beiträge: 4
Danke Dir sehr,
das war geanau das, was ich suchte. Aber wie es leider immer ist, wirft eine Antwort, tausend weitere Fragen auf. hehe...
Wie kann ich so etwas ebenenübergreifend machen und wie kann man das "Punkte-Setting" dann abspeichern?

Leider habe ich nicht so viel Ahnung vom Programieren. Aber ich lerne schnell.


danke nochmals

Geändert von Hotzn (12-04-2011 um 12:36 Uhr)
Hotzn ist offline   Mit Zitat antworten
Alt 13-04-2011, 10:02   #5 (permalink)
Rock'n'Bass
 
Benutzerbild von <sVkVmVit>
 
Registriert seit: Feb 2006
Ort: Hamburg
Beiträge: 202
Post

Jo kein Problem. Und ja klar man kennt das.. ist das eine erledigt, kommt gleich das nächste..

Zitat:
Zitat von Hotzn Beitrag anzeigen
Wie kann ich so etwas ebenenübergreifend machen
Was genau meinst du mit "ebenenübergreifend"?

Zitat:
und wie kann man das "Punkte-Setting" dann abspeichern?
Dazu habe ich den Code nochmal etwas erweitert um ein "points"-Array (nicht erschrecken, sieht mehr aus als es ist ), das für jeden Punkt seinen aktuellen Wert speichert.
(Hab das Wort "points" gewählt, da du ja schon deine anderen Objekte als Punkte bezeichnet hast.. könnte sonst zu Verwirrung führen^^)

Hab zum besseren Verständnis mal zusätzlich eine Übersicht darüber geschrieben, was nacheinander passiert im Code (siehe unten).

Code:
stop();

var anz_punkte:Number = 2;
var aktiverpunkt:Number = 0;

var points:Array = [];
for (i=0; i<anz_punkte; i++){
	points[i] = 0;
	}
trace("Startwerte im points-Array: "+points+"\n");

// ----------------------------------------------------------
// Mausklick-Events:
_root.onMouseDown = function(){
	
	for (i=1; i<=anz_punkte; i++){

		if (_root["punkt"+i].hitTest(_root._xmouse, _root._ymouse)){
			aktiverpunkt = i;
			}

		if (_root.plusbutton.hitTest(_root._xmouse, _root._ymouse) && aktiverpunkt == i){
			trace("punkt"+i+" wird um 1 erhöht.");
			points[(i-1)] += 1;
			trace("Das points-Array ist jetzt: "+points+"\n");
			}

		if (_root.minusbutton.hitTest(_root._xmouse, _root._ymouse) && aktiverpunkt == i){
			trace("punkt"+i+" wird 1 abgezogen.");
			if (points[(i-1)] > 0){
				points[(i-1)] -= 1;
				}
			trace("Das points-Array ist jetzt: "+points+"\n");
			}
		}

}
Code:
// Variablen definieren

// points-Array definieren zum "Archivieren" der jeweiligen Werte für jeden Punkt
// Füllen des Arrays mit Nullen als Startwerte

// ----------------------------------------------------------
// Mausklick-Events: 

// Ermitteln des geklickten und somit aktiven Punkts

// Bei Klick auf Plusbutton den Wert des jeweils aktiven Punkts um 1 erhöhen
// ..und diesen Wert im points-Array speichern

// Bei Klick auf Minusbutton dem Wert des jeweils aktiven Punkts 1 abziehen
// ..und diesen Wert im points-Array speichern
Wie du das ganze anzeigst, werde ich dir gleich in einem weiteren Beitrag zeigen, das ist dann auch nicht mehr allzu schwer. Also bis gleich. ^^

::
__________________
==>remix.nin.com<==
//
Life Is Too Short For Boring Music!
Fantasie ist die einzige Waffe gegen die Wirklichkeit.

Geändert von <sVkVmVit> (13-04-2011 um 10:20 Uhr)
<sVkVmVit> ist offline   Mit Zitat antworten
Alt 13-04-2011, 13:01   #6 (permalink)
Rock'n'Bass
 
Benutzerbild von <sVkVmVit>
 
Registriert seit: Feb 2006
Ort: Hamburg
Beiträge: 202
Smile The End^^

Sooo, da bin ich wieder.

Wenn du den letzten Beitrag gelesen und angewendet hast, dann fahre nun wie folgt fort:

1. Erstelle 3 Textfelder
2. Stelle alle in ihrem jeweiligen Eigenschaften-Fenster auf "Dynamisches Textfeld" und gebe (ebenfalls in den Eigenschaften) unter Variable fürs erste Textfeld "verbleibend" ein, fürs nächste "anzeige1" und fürs letzte "anzeige2".
3. Du solltest nun 3 dynamische Textfelder auf der Bühne liegen haben, deren Variablennamen "verbleibend", "anzeige1" und "anzeige2" lauten.
( 4. Zur Sicherheit, damit auch wirklich NUR Zahlen dargestellt werden können, kannst du wenn du willst, auch noch unter Einbetten nur Zahlen aktivieren. )

Nun zum Code:

- Ich habe unter den bereits bekannten Zeilen (Variablen-Definition und Array-Erstellung) drei weitere Zeilen hinzugefügt, welche dazu da sind, den Textfeldern ihre Startwerte zuzuteilen.

- Des weiteren habe ich die Codezeilen, die sich auf den Plus- und den Minusbutton beziehen, entsprechend erweitert. D.h. wenn man nun per Plusbutton den Wert eines Punkts erhöht, wird entsprechend von den verbleibenden points 1 abgezogen ( _root.verbleibend--; ) und mit dem Minusbutton ist es logischerweise dasselbe, nur andersrum ( _root.verbleibend++; ).

- Das Anzeigen der Werte der einzelnen Punkte ist nun nur noch ein Kinderspiel und geschieht mit einer einfachen Zeile, die sowohl beim Plus- als auch beim Minusbutton dieselbe ist: _root["anzeige"+i] = points[(i-1)];
Damit wird der jeweils aktuelle Wert des derzeit aktiven Punkts (aus dem zuvor erstellten Array entnommen ) dem zugehörigen "anzeige1"- bzw. "anzeige2"-Textfeld zugewiesen.

HINWEISE für die weitere Bearbeitung:
Wenn du nun weitere Punkte hinzufügen willst, kannst du dies nun einfach tun. Das einzige, worauf du achten musst, ist, dass sie 1. durchnummerierte Instanznamen haben, also "punkt1", "punkt2", "punkt3", ... usw. und 2. du die Anzahl deiner auf der Bühne befindlichen Punkte im Code unter var anz_punkte:Number = ...; angibst.
Die zugehörigen Textfelder zu den Punkten bauchst du ganz einfach nur durchnummeriert auf die Bühne legen.

Sooo! Nun bin ich auch erstmal durch. ^^ Ich hoffe du hast soweit einiges verstanden und hoffe, dass nun alles so läuft, wie du es wolltest!

LG Nils

Code:
stop();

var anz_punkte:Number = 2;
var aktiverpunkt:Number = 0;

var points:Array = [];
for (i=0; i<anz_punkte; i++){
	points[i] = 0;
	}
trace("Startwerte im points-Array: "+points+"\n");

_root.verbleibend = 10;
_root.anzeige1 = 0;
_root.anzeige2 = 0;

//-------------------------------------------------------
// Maus-Events
_root.onMouseDown = function(){
	
	for (i=1; i<=anz_punkte; i++){
		if (_root["punkt"+i].hitTest(_root._xmouse, _root._ymouse)){
			aktiverpunkt = i;
			}
		if (_root.plusbutton.hitTest(_root._xmouse, _root._ymouse) && aktiverpunkt == i){
			if (_root.verbleibend > 0){
				trace("punkt"+i+" wird um 1 erhöht.");
				points[(i-1)] += 1;
				trace("Das points-Array ist jetzt: "+points+"\n");
				_root.verbleibend--;
				_root["anzeige"+i] = points[(i-1)];
				}
			}
		if (_root.minusbutton.hitTest(_root._xmouse, _root._ymouse) && aktiverpunkt == i){
			if (_root.verbleibend < 10){
				if (points[(i-1)] > 0){
					trace("punkt"+i+" wird 1 abgezogen.");
					points[(i-1)] -= 1;
					trace("Das points-Array ist jetzt: "+points+"\n");
					_root.verbleibend++;
					_root["anzeige"+i] = points[(i-1)];
					}
				}
			}
		}

}
__________________
==>remix.nin.com<==
//
Life Is Too Short For Boring Music!
Fantasie ist die einzige Waffe gegen die Wirklichkeit.

Geändert von <sVkVmVit> (13-04-2011 um 13:21 Uhr)
<sVkVmVit> ist offline   Mit Zitat antworten
Alt 14-04-2011, 18:20   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2011
Beiträge: 4
Ich danke Dir sehr.

Es funktioniert alles so wie ich mir das vorgestellt habe.
Danke, danke, danke.
Auch kann ich alles, dank deiner guten Erklärung, verstehen.
Da an einer sehr komplexen Darstellung arbeite, wird es wohl etwas dauern
bis ich was vorzeigen kann.

Ich sage mal ganz geschwollen:
Wenn es so weit ist, zeige ich Dir das Egebniss.

Gruss, Hotzn^^

Geändert von Hotzn (14-04-2011 um 18:26 Uhr)
Hotzn ist offline   Mit Zitat antworten
Alt 16-04-2011, 12:44   #8 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
ich hab eben auch mal schnell ein kleines beispiel zusammen gehackt..
sind zwar ein paar mehr zeilen geworden als deine 47, aber was solls..
fla (CS3) zum beispiel ist im anhang..

PHP-Code:
import flash.events.MouseEvent;

var 
ptsNumNumber 4;     // the number of clickable 'point-clips' on the stage
var maxPts:Number 10;     // the max number of points to spread 
var pts:Number maxPts;    // the current spreaded points

var activePoint:  Object null;    // shortcut to the current selected point value object

var pointList: Array = new Array;    // stores the point value-objects {target:null, data:0}


// event-handler which is invoked
// by a click of the <plus> button
// 
function onPlusClick (e:MouseEvent): void {
    
    var 
activePointValueNumber parseInt(activePoint.data);
    
    if ( ((
pts 1) >= 0) && (activePointValue maxPts) ) {
        
pts--;
        
activePoint.data parseInt(activePoint.data) + 1;
    }
    
update();
}


// event-handler which is invoked
// by a click of the <minus> button
// 
function onMinusClick (e:MouseEvent): void {
    
    var 
activePointValueNumber parseInt(activePoint.data);

    if ( ((
pts 1) <= maxPts) && (activePointValue 0) ) {
        
pts++;
        
activePoint.data parseInt(activePoint.data) - 1;
    }
    
update();
}


// event-handler which is invoked
// by a click of the <point>
//
function onPointClick (e:MouseEvent): void {
    
setActivePoint(e.target as MovieClip);    
}


// set the <activePoint> based on clicked movieclip
// @param    target    The clicked <point> movieclip
//
function setActivePoint (target:MovieClip): void {
    
    if (
activePoint != null)
        
activePoint.target.gotoAndStop(1);

    for 
each (var p in pointList) {
        if (
p.target.name == target.name) {
            
activePoint p;
            
activePoint.target.gotoAndStop(2);
        }
    }
}


// update the view elements
//
function update (): void {
    
txt.text pts.toString();
    for 
each (var p in pointList) {        
        
p.target.txt.text p.data.toString();
    }    
}


// Setup our <pointList> array and registers the event-handler.
// The <pointList> contains the <data> objects in the format: { target: null, data:0 }
// were <target> is the reference to the clickable 'point' on the stage
// and  <data> the current point value of the <target>
// The name of the 'points' is "p" + n and starts with "0" ("p0", "p1", "p2", etc.)
// 
function init (): void {

    
plus.addEventListener(MouseEvent.CLICK,  onPlusClick);
    
minus.addEventListener(MouseEvent.CLICKonMinusClick);
    
plus.mouseChildren 
    
minus.mouseChildren false;

    var 
nint 0;
    var 
ptMovieClip;
    
    for (
n=0n<ptsNumn++) {
    
        try {
            
pt getChildByName('p'+n) as MovieClip;
            
pointList.push( { target:ptdata:} );
        }
        catch (
e:Error) {};
    }

    for 
each (var p in pointList) {
        
p.target.addEventListener(MouseEvent.CLICKonPointClick);
        
p.target.mouseChildren false;
    }
    
    
// -- set initial active point and update view
    //
    
setActivePointpointList[0].target );
    
update();
}


//-- fire up the whole thing
//
init(); 
hoffe es gefaellt, bei fragen, fragen..
gruss

//b
Angehängte Dateien
Dateityp: zip punkteverteiler.zip (23,3 KB, 5x aufgerufen)
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn

Geändert von the binary (16-04-2011 um 12:50 Uhr)
the binary ist offline   Mit Zitat antworten
Alt 18-04-2011, 22:37   #9 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
hm.. nich gut ?
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 19-04-2011, 08:31   #10 (permalink)
Neuer User
 
Registriert seit: Apr 2011
Beiträge: 4
Hallo,
doch ich finde diese version auch sehr gut, da die Punkte ja ihre Farbe verändern wenn sie aktiv sind. Bin dabei es anzuwenden.^^

Danke Dir auch sehr dafür.
Hotzn 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
event-Verteiler / Instanzname pius Softwarearchitektur und Entwurfsmuster 11 26-04-2003 18:00
Verteiler im Formular Blitzableiter Flash 4 und Flash 5 4 23-02-2002 23:31


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

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


Copyright ©1999 – 2012 Marc Thiele