# Combo



## Grejak (24. Dez 2011)

Ich hätte mal die Frage wie man combos realisieren könnte z.B Space+a  oder eine
Abfolge 1.A 2.t 3.t 4.a 5.c 6.k


----------



## Fu3L (24. Dez 2011)

Der einfachste Fall ist, wenn du beide gleichzeitig gedrückt haben willst:


```
boolean spacePressed = false;
boolean aPressed = false;
public void keyPressed(KeyEvent ev) {
  if(ev.getKeyCode() == KeyEvent.VK_SPACE) {
     spacePressed = true;
  } else  if(ev.getKeyCode() == KeyEvent.VK_A) {
     aPressed = true;
  }
}

public void keyReleased(KeyEvent ev) {
  if(ev.getKeyCode() == KeyEvent.VK_SPACE) {
     spacePressed = false;
  } else  if(ev.getKeyCode() == KeyEvent.VK_A) {
     aPressed = false;
  }
}

public boolean isSuperCooleComboChosen() {
 return spacePressed && aPressed;
}
```

So in etwa schnell hierhingeschmiert...
Bei zeitlicher Abfolge, musst du da eben noch die Zeit zu speichern und vergleichen, ob das letzte A-Drücken nicht mehr als zB 1 Sekunde her ist, wenn du B drückst...


----------



## Grejak (24. Dez 2011)

Vielen dank

hast mir sehr weitergeholfen


----------



## Grejak (24. Dez 2011)

Nocheinmal eine andere frage hast du vlt auch eine lösung hierfür

Ich möchte einen bogen implementiren und pfeile die dann eine parabell fliegen

PARABELL:rtfm: wie setze ich das um ich hab mir so eine methode überlegt


```
public Point2D nextPointOnParabell(float factor,int momemtanx,int monentany){
.......
}
```

Aber es fehlt bisher jede logic


----------



## Fu3L (24. Dez 2011)

Die Formel für den y-Wert in Abhängigkeit von x ist ja gegeben durch:

vy * t - g/2 * t^2

g ist deine Schwerkraft, vy die Startgeschwindigkeit in y Richtung.

Wenn du nur eine Startgeschwindigkeit hast, die auch die x-Komponente enthält, sieht die Formel wie folgt aus:

v0 * t * sin(alpha) - g/2 * t^2

Dabei ist alpha der Abschusswinkel...

Wenn du deiner Funktion also übergibst, vor wie langer Zeit der Pfeil gestartet wurde und unter welchen Bedingungen er abgefeuert wurde (alpha, v0), kannst du jederzeit berechnen, wie hoch der Pfeil noch ist. 

Für die x-Position gilt: x(t) = v0 * x * cos (alpha)

Natürlich wäre es auch denkbar aus der momentanen Position und der Geschwindigkeit einen neuen Punkt zu berechnen, dafür müsstest du aber entweder den momentanen Flugwinkel und die Geschwindigkeit kennen oder die Momentangeschwindigkeit in ihre x- und y-Komponente zerlegt vorliegen haben (die du also auch immer neu berechnen müsstest... Dafür verweise ich auf Wikipedia "Schiefer Wurf")

Edit: Für Reibung verweise ich ebenso auf Wikipedia^^

Edit2: Kleine Ergänzung: Natürlich müsste man sich einen gewissen Höhenoffset merken, da der Pfeil ja normal nicht von Höhe null aus fliegt, sondern von Bogenhöhe aus, ebenso einen xOffset, da auch der Schütze nicht oder nur selten an Stelle 0 stehen wird.

Edit3: parabola ist das Englische Wort für Parabel (im Deutschen mit nur einem l  )


----------



## Grejak (24. Dez 2011)

uff:shock:
dass ist viel auf einmal
trotzdem sind da sehr viele gute anregungen drin die ich versuchen werde umzusetzen:idea:

VIELEN VIELEN DANK:toll:


----------



## Fu3L (24. Dez 2011)

> x(t) = v0 * x * cos (alpha)



Der Teil muss natürlich lauten v0 * t * cos(alpha).. Und ganz in der ersten Zeile müsste es heißen "in Abhängigkeit von der zeit".. Da hab ich mich kurz vertan^^

Auf jeden Fall sollte es ein Pfeil Objekt geben, dass dann selbstständig sich um die Speicherung des Startpunktes, der Geschwindigkeit zum Start und des Startwinkels kümmert, dann wird das ganze redcht einfach.

Physik aus der Oberstufe hilft natürlich, aber ist denke ich auch ohne schaffbar


----------



## Grejak (27. Dez 2011)




----------



## Grejak (28. Dez 2011)

Hat jemand noch eine gute Methode un Schaden zu berechnen, ich habe bis jetzt zwei die mir aber nicht gefallen:

1.) hier sind damage, defense und life einfache Werte


```
long damage,defense,life;
```


```
public void attack(Enemy enemy){
   enemy.life-=(this.damage-enemy.defense);
}
```

2.)Hier ist der defense wert ein prozent wert

```
public void attack(Enemy enemy){
       	enemy.life-=this.damage-((this.damage/100)*enemy.defense);
}
```


----------

