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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-09-2009, 16:36   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 8
Schützenwettbewerb

Hallo zusammen,

ich möchte ein kleines Flashgame programmieren, in dem es um einen Schießwettbewerb geht. Um das ganze nicht zu einfach zu machen, sollte der Cursor eine natürliche Unruhebewegung machen.
Könnt ihr mir sagen wie ich diese Bewegung implementiere?

Gruß,
guru85 ist offline   Mit Zitat antworten
Alt 17-09-2009, 17:08   #2 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510

da hab ich was aus der Mottenkiste mit Wind und Bier und Tralala

Berechnung eines Treffers

kannst dir ja auch das ganze Thema mal durchlesen
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 09:40   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 8
Vielen Dank für den Link, hat mich schon ein ganzes Stück weitergebracht.

Leider handelt es sich bei meinem Schützenwettbewerb nicht um klassisches Zielscheiben schießen. Die Zielscheibe ist eine Holzfigur der man in dem Spiel 5 Hauptpreise herabschießen kann. Herz, Krone, Zepter, etc..

Nun habe ich den Torso der Figur (ohne die Hauptpreise) in den HG gelegt. Das treffen bspw. des Herzens habe ich einfach in einem neuen MC animiert.

Den Bereich habe ich einfach über die Pixelabmessungen abgebildet: (siehe auch oberes Programm)

Code:
if ((obj._x > -5 & obj._x < 5)&&(obj._y > -5 & obj._y < 5)) {		
			
			_root.apfel.gotoAndPlay(2);
			tf2.text ="Herz";
			treffer = 100;
			
		}
Den Movieclip des Treffers habe ich auf der ersten und letzen Pos mit einem stop(); versehen.

Leider wird der Film nich abgespielt. Was habe ich falsch gemacht?

Und: Die Pixeldefinition wie oben ist sehr ungenau und alles andere als Herzförmig. Wie kann ich das besser lösen?

Evtl. einen unsichtbaren Button genau in dieser Form drüberlegen?

Danke für die Antworten.

Gruß
guru85 ist offline   Mit Zitat antworten
Alt 22-09-2009, 10:23   #4 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
Zitat:
Zitat von guru85 Beitrag anzeigen
Leider wird der Film nich abgespielt. Was habe ich falsch gemacht?

Und: Die Pixeldefinition wie oben ist sehr ungenau und alles andere als Herzförmig. Wie kann ich das besser lösen?

Evtl. einen unsichtbaren Button genau in dieser Form drüberlegen?
Kenne ja deinen Film nicht
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 11:22   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 8
Wie gesagt, habe nur das eine script etwas modifiziert. Vieles davon wird nicht benötigt.

Hier trotzdem mal die Scripte:



Code:
mcp = MovieClip.prototype;    
mcp.drawCircle = function (x, y, r) {
    this.moveTo (x+r, y);
    this.curveTo (r+x, 0.4142*r+y, 0.7071*r+x, 0.7071*r+y);
    this.curveTo (0.4142*r+x, r+y, x, r+y);
    this.curveTo (-0.4142*r+x, r+y, -0.7071*r+x, 0.7071*r+y);
    this.curveTo (-r+x, 0.4142*r+y, -r+x, y);
    this.curveTo (-r+x, -0.4142*r+y, -0.7071*r+x, -0.7071*r+y);
    this.curveTo (-0.4142*r+x, -r+y, x, -r+y);
    this.curveTo (0.4142*r+x, -r+y, 0.7071*r+x, -0.7071*r+y);
    this.curveTo (r+x, -0.4142*r+y, r+x, y);
};



Stage.scaleMode = "noScale";    
dist = function(x1, y1, x2, y2){
    return (Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
};    
Mouse.hide();

mcp.create_scheibe = function(x,y,ra,ringe){
	loch_diff = 1;//Einschusslochradius
	var tf = this.createTextField("tf",9000,0,20,200,100);
	var tf2 = this.createTextField("tf2",9001,0,80,200,100);
	var cursor_mc = this.createEmptyMovieClip("cursor_mc",10000);
	with(cursor_mc){
	beginFill(0x444444,100);
		drawRec(0,0,20,20);
		drawRec(0,0,18,18);
		beginFill(0xFFFFFF,50);
		drawRec(0,0,18,18);
		beginFill(0x444444,100);
		drawCircle(0,0,9);
		drawCircle(0,0,8);
		drawCircle(0,0,4);
		drawCircle(0,0,3);
		_x = _xmouse;
		_y = _ymouse;
		}
    farben = [0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x444444,0x444444,0x444444,0x444444,0xFFFFFF,0xFFFFFF,0xFFFFFF];
    farben_rand = [0x444444,0x444444,0x444444,0x444444,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x444444,0x444444,0x444444];
    abstand = (ra*2)/((ringe*2)+1);
    this.createEmptyMovieClip("scheibe",1);
    checker = [];
    for (var i=0;i<=ringe;i++){
        checker[i] = ra-(abstand*i);
        var mc = this.scheibe.createEmptyMovieClip("ring"+i,i);
        mc.beginFill(farben_rand[i],100);
        mc.drawCircle(0,0,ra-(abstand*i));
        mc.beginFill(farben[i],100);
        mc.drawCircle(0,0,(ra-(abstand*i))-1);
        if(i<ringe){
            mc.createTextField("tfl",1,0,0,0,0);
            mc.createTextField("tfr",2,0,0,0,0);
            mc.createTextField("tfo",3,0,0,0,0);
            mc.createTextField("tfu",4,0,0,0,0);
            
            mf = new TextFormat();
            mf.font = "Arial";
            mf.size = 10;
            mc.tfl.autoSize = true;
            mc.tfl.selectable = false;
            mc.tfl.text = i+1;
            mc.tfl.setTextFormat(mf);
            mc.tfl.textColor = farben_rand[i];
            mc.tfl._x = -Math.round((mc._width/2)-(abstand/2)+mc.tfl.textWidth/2)-1;
            mc.tfl._y = -Math.round(mc.tfl._height/2);
            
            mc.tfr.autoSize = true;
            mc.tfr.selectable = false;
            mc.tfr.text = i+1;
            mc.tfr.setTextFormat(mf);
            mc.tfr.textColor = farben_rand[i];
            mc.tfr._x = Math.round((mc._width/2)-(abstand/2)-mc.tfr.textWidth/2)-2;
            mc.tfr._y = -Math.round(mc.tfr._height/2);
            
            mc.tfo.autoSize = true;
            mc.tfo.selectable = false;
            mc.tfo.text = i+1;
            mc.tfo.setTextFormat(mf);
            mc.tfo.textColor = farben_rand[i];
            mc.tfo._x = -mc.tfo._width/2;
            mc.tfo._y = -Math.round((mc._height/2)-(abstand/2)+mc.tfo.textHeight/2)-1;
            
            mc.tfu.autoSize = true;
            mc.tfu.selectable = false;
            mc.tfu.text = i+1;
            mc.tfu.setTextFormat(mf);
            mc.tfu.textColor = farben_rand[i];
            mc.tfu._x = -mc.tfo._width/2;
            mc.tfu._y = Math.round((mc._height/2)-(abstand/2)-mc.tfu.textHeight/2)-1;
        }
    }
    this.scheibe._x = x;
    this.scheibe._y = y;
    start_x = x;
    start_y = y;
};



check = function (obj) {
    diff = dist(start_x, start_y, obj._x, obj._y)-loch_diff;
    tf.text = "";
	
	tf.text=" " + obj._x;
    ringe = checker.length;
    i = 0;
    treffer = 0;
    for(var i=0;i<ringe;i++){
		
		/*Ton abspielen*/
		   
     schuss = new Sound();
	 schuss.attachSound("blub.wav");
    
      schuss.start(); 
		
 
		/*
        if (diff<checker[i-1] && diff>checker[i]){
            tf2.text = i + " getroffen";
            treffer = i;
        }
		
		
		
        if (diff>checker[0]){
            tf2.text = " daneben!: ";
        }
        if (diff<checker[i]){
            tf2.text = "10+ getroffen";
            treffer = 20;
        } 
		*/
		//Zepter
		if ((obj._x > -5 & obj._x < 5)&&(obj._y > -5 & obj._y < 5)) {
			tf2.text ="Zepter"
			treffer = 100;
		}
		
		//Reichsapfel
		if ((obj._x > -5 & obj._x < 5)&&(obj._y > -5 & obj._y < 5)) {		
			
			tf2.text ="Reichsapfel";
			treffer = 100;
			
		}
    }
    counter = counter+treffer;
    tf.text = counter;
};


this.onEnterFrame = function(){
        if (Key.isDown(40)) {
            bier--;
            if(bier<0) bier = 0;
        }
        if (Key.isDown(38)) bier++;
        if (Key.isDown(37)) wind--;
        if (Key.isDown(39)) wind++;
        
    bier_intus = Math.round(random(bier)/10);
    if(wind>0){
		richtung = "von links";
	}
	else{
		richtung = "von rechts";
	}
	tf.text = "Wind "+ wind/10 +" m/h " +  richtung;
    cursor_mc._x += (_xmouse-cursor_mc._x)/4 + bier_intus;
    cursor_mc._y += (_ymouse-cursor_mc._y)/4 + bier_intus;
    lauf._rotation = Math.atan2(cursor_mc._x-lauf._x, lauf._y-cursor_mc._y)*180/Math.PI;
    updateAfterEvent();
};

this.onMouseDown = function(){
    count++;
    var was = this.createEmptyMovieClip("loch_mc"+count,100+count);
	was.beginFill(0xb08585,100);
	was.drawCircle(0,0,(loch_diff+1));
	was.beginFill(0x000000,100);
	was.drawCircle(0,0,loch_diff);
	was._x = cursor_mc._x + wind;
	was._y = cursor_mc._y;
    check(was);
};

count = 0;
counter = 0;
tf.text = counter;
//-------------
//Scheibe bei x = 400, y = 260, Radius 150 px, 11 Ringe
//-------------
this.create_scheibe(400,260,150,10);
lauf._x = scheibe._x;
lauf._y = 620;
bier = 70;
if(Math.random() < 0,5){
	vz = -1;
}
else {
	vz = 1;
}
wind = Math.round((Math.random()*10))*vz; //10;

Außerdem habe ich jetzt eine unsichtbare Schaltfläche in der benötigten Form darüber gelegt mit folgendem script:

Code:
on(press) {
	apfel.gotoAndPlay(2);
}
apfel heißt der Movieclip, in dem der getroffene Apfel zu Boden fällt. (auch der name/bezeichner der platzierten Instanz).


Leider wird dieser MC eben nicht abgespielt...
guru85 ist offline   Mit Zitat antworten
Alt 22-09-2009, 11:45   #6 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
da du ja nehm ich an Objecte in der FLA hast wärs besser die mal zu zeigen
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 14:14   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 8
Was meinst du denn genau mit objekten in der FLA?

Momentan habe ich auf der HZL vier Ebenen mit jeweils einem Schlüsselbild. Eine mit dem HG
Eine mit dem langen Hauptscript (s.o.)
Eine mit dem Movieclip, in der der fallende Apfel annimiert ist
Eine mit der transparenten Schaltfläche über dem Apfel
guru85 ist offline   Mit Zitat antworten
Alt 22-09-2009, 14:31   #8 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
wenn du schon eine Antwort auf deine Frage willst wäre es sehr freundlich
eine .fla zu zeigen damit man mal schauen kann.

Aber wenn möglich Flash8 - wenn nicht möglich reicht auch eine .swf
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 15:15   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 8
ups sorry, klaro
Angehängte Dateien
Dateityp: fla schiessen.fla (163,5 KB, 8x aufgerufen)
guru85 ist offline   Mit Zitat antworten
Alt 22-09-2009, 15:55   #10 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
kannst du das auch als Flash8 speichern? ansonsten reicht eine .swf
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 16:34   #11 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 485
hab mir erlaubt Dir die fla als Flash 8 zu speichern

Edit: ich sehe gerade das die um ein ganzes stück geschrumpft ist. WAHNSINN!!
Angehängte Dateien
Dateityp: fla schiessen.fla (72,0 KB, 8x aufgerufen)
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website

Geändert von Linowitch (22-09-2009 um 16:36 Uhr)
Linowitch ist offline   Mit Zitat antworten
Alt 22-09-2009, 16:48   #12 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
hehe - danköööööö

bin ja gleich erschrocken wegen dem Spielhallensound
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 17:04   #13 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
ist natürlich Blödsinn das Script für deine Art des Schießwettbewerbs zu verwenden.

Da ist besser das ganze neu zu machen.

Im Prinzip brauchst nur das attachen des Schusslochs an _xmouse/_ymouse
und dann eine hitTestabfrage.
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 22-09-2009, 18:09   #14 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
ich hab mal bißchen rausgeschmissen

Fadenkreuz und Schussloch sind jetzt in der Bibliothek
Angehängte Dateien
Dateityp: zip schiessen2.zip (27,3 KB, 2x aufgerufen)
__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 23-09-2009, 17:57   #15 (permalink)
Neuer User
 
Registriert seit: Sep 2009
Beiträge: 8
Abgefahren!

Vielen Dank für eure Mühen!

Habe das Schussloch noch etwas modifiziert. Leider funktioniert jetzt die kollisionsabfrage nicht mehr so wies eigentlich tun sollte. Das Ziel wird äußerst selten getroffen, ich glaube wenn ich genau ein bestimmtes Pixel treffe, also irgendwann mal nach 20-30 Versuchen. Woran liegt das?

Zum Hintergrund. Bei dem Schießen handelt es sich nicht um irgendeine Lasergun, wie der Sound vermuten lässt (hatte nichts besseres zum ausprobieren), sondern um ein Armbrustschießen, das es tatsächlich gibt. Man schießt mit Bolzen auf einen Adler aus Holz. Sprich die Teile sollten getroffen sein, wenn die Spitze (also der Mittelpunkt des "Schusslochs") innerhalb des MC liegt.

Außerdem: Wo mache ich die Fallunterscheidung zwischen Apfel, Herz, Krone, etc.? Im Moment ist "was = apfel" definiert?
Angehängte Dateien
Dateityp: fla schiessen2.1.fla (144,0 KB, 7x aufgerufen)

Geändert von guru85 (23-09-2009 um 17:58 Uhr)
guru85 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:25 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele