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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-05-2010, 18:02   #1 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 5
Penalty schießen - 3.Dimension faken?

Liebes Forum!
Ich möchte wie viele ein Penalty-Spiel umsetzen. Als Grundlage für die Flugbahn habe ich das Ballistik Tutorial von H.G.Seib verwendet.
H.G.Seib

Mich würde nun interessieren, wie ich die Ballgröße, die sich ja im Raum verändert mit der Bodenhoehe verknüpfen könnte, damit der Ball an unterschiedlichen Orten am Boden im Raum abprallen kann. Ich komm gerade einfach nicht drauf wie das geht!! Die Bodenhoehe ist bis jetzt ein statischer Wert. Bitte um Hilfe.

Unten angefügt, der Code vom Schuss.
Code:
var zcenter = 0;
var fl=150; 
ball_mc.addEventListener(MouseEvent.MOUSE_UP,kickinit);
function kickinit(e:MouseEvent):void {
	speed = powerbar_mc.currentFrame/0.7;
	var yspeed:Number = (1/ymov)*speed;
	var xspeed:Number = (1/xmov)*speed;
	powerbar_mc.stop();
	ball_mc.addEventListener(Event.ENTER_FRAME,moveBall); 
        function moveBall(e:Event):void {
	  if (bodenhoehe<ball_mc.y) {
            yspeed = -yspeed;
            ball_mc.y = bodenhoehe+gravity;
          }
	  yspeed-= gravity;
	  yspeed*= daempfung;
	  ball_mc.y -= yspeed;
	  if(Math.abs(xspeed)>0.1) {
            xspeed *= daempfung;
            ball_mc.x -= xspeed;
         }
          zcenter+=speed/3;
          var scale=fl/(fl+zcenter);
          ball_mc.scaleX= ball_mc.scaleY = scale*1.0;
	}
}
Sinew ist offline   Mit Zitat antworten
Alt 23-05-2010, 01:22   #2 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 205
Gibt zcenter die Position auf der z-Achse wieder?
Dann würde ich in der gleichen Schleife bodenhoehe in Abhängigkeit von zcenter definieren. Dein Tor dürfte vermutlich Dein bodenhoehe-Höhepunkt sein, also der y-Wert an dem der Pfosten in den Erdboden verankert wird.
Poste doch mal eine fla oder eine swf um sich das angucken zu können.
Flashesjetzt ist offline   Mit Zitat antworten
Alt 23-05-2010, 12:48   #3 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 5
So, hab das letztendlich folgendermaßen gelöst:
Ich verschiebe den Ball auf der z-Achse mit der Geschwindigkeit mit der er sich auf der y-Achse bewegt. Dadursch scheint sich auch die Bodenhöhe zu verändern, die ursprünglich auf der Ballposition war.

Mein Problem jetzt ist aber:
1. dass die Skalierung auf der z-Achse viel zu stark ist
2. die 2 Movieclips (Tor und Ball) auf der Z-Achse kollidieren zu lassen, da die z-Position im Raum standardmäßig bei jedem Objekt 0 ist und die Movieclips auf der z-Achse miteinander nicht in Abhängigkeit stehen.

Gibts dazu Ideen??
Sinew ist offline   Mit Zitat antworten
Alt 23-05-2010, 20:28   #4 (permalink)
ING
whatever
 
Registriert seit: May 2008
Beiträge: 419
1. dazu musst du nur einen größeren wert für fl eintragen, ich nehm meistens sowas um die 500 - 800

2. dafür solltest du doch dazu über gehen dem ball seine eigene z achse zu geben, ist ja nur eine eigenschaft die du dann statt zcenter angibst. das ganze musst du dann natürlich in die animation mit einbauen dafür lösen sich fast alle probleme weil der ball dann echte weltkoordinaten hat mit den du arbeiten kannst.

ich für meinen teil geb den objekten immer die eigenschaften _x, _y, _z die ich dann animiere. das umrechnen in die 2d koordinaten sieht dann so aus...

PHP-Code:
var scale fl / (fl ball._z);
ball.scale ball._x;
ball.scale ball._y;
ball.scaleX ball.scaleY scale
ING ist offline   Mit Zitat antworten
Alt 23-05-2010, 20:51   #5 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 5
Wow, danke ING, das hat mir sehr weitergeholfen!! Ich werde versuchen das umzusetzen!
Sinew ist offline   Mit Zitat antworten
Alt 24-05-2010, 09:26   #6 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 5
@ING: eine Frage hätt ich noch. Was machen bei dir die Zeilen
PHP-Code:
ball.scale ball._x;
ball.scale ball._y
ball.x ist die Position vom Ball auf der x-Achse
wieso wird dann die wahre Position mit der Eigenschaft mal der Skalierung gleichgesetzt, wenn durch
PHP-Code:
ball.scaleX ball.scaleY scale
eh skaliert werd. Bzw. was macht ball_x bei dir genau?
Versteh ich irgendwie nicht!
Im vorraus schon einmal Danke!
Sinew ist offline   Mit Zitat antworten
Alt 24-05-2010, 16:59   #7 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 5
Sry für die Doppelposts, aber ich schaff das einfach nicht:
die Skalierung ist immernoch viel zu stark und ich schaff es nicht die Bodenhoehe mit der z-Achse sinnvoll zu verknüpfen. Hier ist der Code ich hoffe manmir kann wer ganz helfen - ich habe sehr viel auskommentiert also sollte es eigentlich klappen . Ist mein erste Projekt mit Actionscript und AS3, also bitte nochmals um Hiilfe! Danke im vorraus nochmal!

PHP-Code:
// ersten Positionen vom Ball
// Math.radmdom damit der Ball nicht geenau auf der selben x-Position liegt, sondern ein bisschen versetzt
var origx 320+Math.random(); // x-Mittelpunkt der Bühne
var origy 420;
// auf der virtuellen z-Achse hat der Ball am Anfang die Position 56.3
var origz 56
// die virtuelle z-Achse hat eine Tiefe von 675.47 = Feldtiefe
var feldtiefe=675.47;
// Ballkickgeschwindigkeit
var speed;
// Mausposition beim Klick am Ball
var xmauspress;
var 
ymauspress;
// Richtungsvektoren - berechnet durch Ballmittelpunkt und Mausposition beim Ballklick
var xmov;
var 
ymov;
// Tatsächliche Geschwindigkeit mit der sich ball_mc.x,y,z fortbewegt
var xspeed;
var 
yspeed;
var 
zspeed;
// Werte die den Ball und die Geschwindigkeit beeinflussen 
var bodenhoehe 445-ball_mc.height/2;  // Anfangsbodenhoehe 
var reibung=0.98// Luftwiderstand    
var gravity// Erdanziehungskraft
//var scale;
// wenn der Ball auf den Boden trifft wird er zusammengedrückt
var elastoabstand:int=5;
var 
elastozoom:int=4;
var 
stauch=0;
// Intervallvariable nach der ein neuer Schuss initiert wird
var setintervall null;


ball_mc.addEventListener(MouseEvent.MOUSE_DOWN,init); // wird Mauszeiger auf den Ball gedrueckt, dann...
function init(e:MouseEvent):void {
    
// Powerbar initialisieren - umso groesser die Powerbar, desto groesser der Speed
    
powerbar_mc.gotoAndPlay(2); 
    
xmauspress ball_mc.mouseX;
    
ymauspress ball_mc.mouseY;
    
xmov = (-1)*xmauspress
    
ymov = (-1)*ymauspress;    
}

ball_mc.addEventListener(MouseEvent.MOUSE_UP,kickinit); // wird MAuszeiger am Ball losgelassen, dann...
function kickinit(e:MouseEvent):void {
    
// Geschwindigkeit definieren u stoppen
    
speed powerbar_mc.currentFrame/5;
    
powerbar_mc.stop();
    
// Bewegungsverhältnis ausrechnen
    
if(ymov!=0)  yspeed speed*ymov/8// 3 damit nicht zu schnell
    
else yspeed=0;
    if(
xmov!=0)  xspeed speed*xmov/8;
    else 
xspeed=0
    
// 4 Sekunden nach dem Schuss einen neuen Schuss initieren
    
gravity =0.4// Erdanziehung erst hier definieren, sonst Probleme bei Kickneustart
    
setintervall setInterval(start5000); 
    
ball_mc.addEventListener(Event.ENTER_FRAME,moveBall); //ENTER_FRAME: wird ausgelöst wenn der Abspielkopf ein neues Bild erreicht
    
function moveBall(e:Event):void {
      
// Fortbewegung auf der y-Achse
      
if (bodenhoehe<ball_mc.y) {
 *****  
yspeed = -yspeed;
        
ball_mc.y=bodenhoehe+gravity;
 **   }
      
yspeed+=gravity// + gravity, da yspeed eine Minuszahl ist
      
yspeed*=reibung;
      
ball_mc.y+=yspeed
      
// Fortbewegung auf der x-Achse
      
if (Math.abs(xspeed)>0.1) {
 *****  
xspeed *= reibung;
 *****  
ball_mc.+= xspeed;
 **   }
      
// Verzerrung wenn der Ball am Boden aufkommt
      
stauch=0;
 **   if ((
bodenhoehe-ball_mc.y)<elastoabstand) {
 *****  
stauch=Math.abs(yspeed)*elastozoom;
 **   }
 **   
ball_mc.scaleX 1.0+(stauch/100);
 **   
ball_mc.scaleY 1.0-(stauch/100);
      
// virtuelle z-achse bzw. Skalierung <= PROBLEM HIER: Skalierung immernoch zu stark und mit Bodenhoehe verknüpfen
      
origz+=speed;
      
trace(speed);
      var 
scale feldtiefe /(feldtiefe+origz);
      
ball_mc.scaleX ball_mc.scaleY scale;
    }
}

//Grundposition vor dem Schuss wiederherstellen <= PROBLEM HIER: RÜCKSKALIERUNG FUNKTIONIERT NICHT
function start():void {
  
ball_mc.x=origx;
  
ball_mc.y=origy
  
origz=420;
  
yspeed=0;
  
xspeed=0;
  
zspeed=0;
  
speed=0;
  
ball_mc.scaleX 1.0;
  
ball_mc.scaleY 1.0;
  
gravity=0;
  
bodenhoehe=421;
  
clearInterval(setintervall);
  
powerbar_mc.gotoAndStop(2);

Angehängte Dateien
Dateityp: swf torwandschießen - Torwandschiessen.swf (95,3 KB, 33x aufgerufen)
Sinew ist offline   Mit Zitat antworten
Alt 02-06-2010, 17:05   #8 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Weil ich gerade etwas ähnliches gemacht habe hier etwas Code aus meinem Spiel ... vll hilft es dir ja.

Private Paste - Pastie

Ich nutze in dem Spiel aus das es mittlerweile von Flash aus nativ eine Z Achse gibt und entsprechend selbst Skalierung und Verschiebung vornimmt, je nach Kameraposition.

Geändert von [RK] (02-06-2010 um 17:08 Uhr)
[RK] ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
3. dimension, ballistik, fußball, penalty

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
3d faken mit Renderings anicon Flash CS3 Professional 2 26-05-2009 09:52
Zoomeffekt faken azachba Flash CS3 Professional 2 09-12-2008 15:12
Blendmode Multiply faken? Asta Flash MX 2004 10 26-08-2005 13:21
Betriebssystemnamen für Counter faken? shck HTML und CSS 7 11-12-2001 08:00


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