<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Referenzen]]></title><description><![CDATA[<p>Hallo, ich hab vieles versucht komme aber nicht weiter. und zwar<br />
in der Methode pfeilWählen, wird ein Pfeil-Objekt ausgewählt .<br />
Dieses Objekt wird dann in der Mehtode Keyboard in pfeilAktuell gespeichert.<br />
Meine Frage, wie bekomm ich das hin, dass alles was mit pfeilAktuell gemacht wird auch in meinem ausgewähltes Pfeilobjekt gespeichert wird??</p>
<p>Vielen Dank für euere Hilfe im Vorraus. ich hoff dass der Code, vllt. doch ein wenig überischtlich ist.</p>
<p>#include &lt;cmath&gt;<br />
#include &lt;iostream&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;GL/glut.h&gt;</p>
<p>#include &quot;Zielscheibe.h&quot;<br />
#include &quot;Scheibe.h&quot;<br />
#include &quot;Pfeil.h&quot;<br />
#include &quot;Bogen.h&quot;<br />
//#include &quot;ZylinderBogen.h&quot;<br />
#include &quot;Kegel.h&quot;<br />
#include &quot;Rechteck.h&quot;<br />
#include &quot;Textausgabe.h&quot;<br />
#include &quot;BodenUndHimmel.h&quot;</p>
<p>//GLfloat winkel =3;</p>
<p>GLfloat drehwinkel = 0.0f; // fürs Umfallen</p>
<p>// Zielscheibe 1 mit Stock<br />
GLfloat abstandZ1 =-1; // wichtig immer negativ!!!! // Dicke der Zielscheibe<br />
GLfloat radiusZ1 = 3; // Radius der Zielscheibe<br />
Zielscheibe z1(abstandZ1, radiusZ1);</p>
<p>// Zielscheibe 2 mit Stock<br />
GLfloat abstandZ2 =-1; // wichtig immer negativ!!!!<br />
GLfloat radiusZ2 = 3;<br />
Zielscheibe z2(abstandZ2, radiusZ2);</p>
<p>// Zielscheibe 3 mit Stock<br />
GLfloat abstandZ3 =-1; // wichtig immer negativ!!!!<br />
GLfloat radiusZ3 = 3;<br />
Zielscheibe z3(abstandZ3, radiusZ3);</p>
<p>Pfeil pfeilAktuell;<br />
const int anzahlPfeile = 6;<br />
Pfeil pfeile[anzahlPfeile];</p>
<p>GLfloat anlegenX = 0;<br />
GLfloat anlegenY = 5;<br />
GLfloat anlegenZ= -10;</p>
<p>GLboolean showPfeil = GL_FALSE;</p>
<p>//Bogendrehung<br />
GLfloat hoch = 0;<br />
GLfloat links = 0;<br />
GLfloat delta = 5;<br />
//Krafteinstellung<br />
GLfloat strecke;<br />
GLfloat delta_Anzeige = 0.075;<br />
GLboolean istOben = GL_TRUE;<br />
GLboolean weiter = GL_TRUE;</p>
<p>GLboolean imSpiel = GL_FALSE;<br />
GLboolean istAngelegt = GL_FALSE;<br />
GLboolean zumZielen = GL_FALSE;<br />
GLboolean zumSchiessen = GL_FALSE;<br />
GLboolean istUnterbrochen = GL_TRUE; // eigelt. auf true</p>
<p>//Bogen<br />
Bogen b1;</p>
<p>//Prototypen<br />
void bodenZeichnen (void);<br />
void himmelZeichnen (void);<br />
GLfloat abstandsBerechnung (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);<br />
GLint koordinatenAbfrageMitZielscheibeStock(Pfeil, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat , GLfloat, GLfloat);<br />
void koordinatenAbfrage (Pfeil&amp;);<br />
void pfeilFliegt(Pfeil);<br />
void zielscheibeUndPfeilZeichnen(Pfeil, Zielscheibe, GLfloat, GLfloat, GLfloat);<br />
void umfallen(Pfeil, Zielscheibe, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);<br />
void drawScene(void);<br />
void pfeilWaehlen(unsigned char, int, int);<br />
void initLightning(void);<br />
void keyboard(unsigned char, int, int);<br />
//void drawBitmapString(void, char);<br />
//void drawStrokeString(void, char);<br />
void printHilfsanweisung();<br />
void printSpielanleitung();</p>
<p>void drawAnzeigeBalken(void)<br />
{<br />
Rechteck r1,r2, r3, r4, r5, r6;</p>
<p>glDisable(GL_LIGHTING);</p>
<p>glPushMatrix();</p>
<p>r1.zeichneAnzeigeBalken(1.0f, 3.0f, 0.0f, 0.0f);<br />
r2.zeichneRechteck(2.0, 0.5, 0.0, -1.75);<br />
r3.zeichneRechteck(2.0, 0.5, 0.0, 1.75);<br />
r4.zeichneRechteck(0.5, 3.0, 0.75, 0.0);<br />
r5.zeichneRechteck(0.5, 3.0, -0.75, 0.0);</p>
<p>if(istOben){<br />
if(strecke&lt;=1.5)<br />
strecke = strecke + delta_Anzeige;<br />
else<br />
istOben = false;<br />
}<br />
else{<br />
if(strecke &gt;= -1.5)<br />
strecke = strecke - delta_Anzeige;<br />
else<br />
istOben = true;<br />
}</p>
<p>glTranslatef(0.0, strecke, 0.0);<br />
r6.zeichneDreieck();</p>
<p>glPopMatrix();</p>
<p>glEnable(GL_LIGHTING);</p>
<p>}</p>
<p>float getKraft() // wird bei der Schussstärke benötigt<br />
{<br />
GLfloat kraft = strecke + 2.5f;<br />
return kraft *200;<br />
}</p>
<p>Pfeil pfeilWaehlen(void){</p>
<p>for (int i = 0; i&lt; anzahlPfeile; i++){<br />
if(pfeile[i].isPfeilAktiv() == GL_FALSE){<br />
// pfeile[i].setPfeilAktiv(GL_TRUE);<br />
return pfeile[i];<br />
}</p>
<p>// // es gibt keine Pfeile mehr -&gt;Game over<br />
}</p>
<p>}</p>
<p>void pfeilAnlegen(Pfeil&amp; p)<br />
{</p>
<p>glPushMatrix();<br />
glTranslatef(0,anlegenY,anlegenZ);</p>
<p>glRotatef(links, 0, 1, 0);<br />
glRotatef(hoch, 1, 0, 0);<br />
b1.bogenMitSehne();<br />
if(showPfeil){// !!!!!!!!!!!?????????????<br />
glRotatef(90, 1, 0, 0);<br />
glTranslatef(0.0f, p.getRadiusPfeil(), -b1.getRadiusAussenBogen()); //letzter Parameter bezieht sich auf Bogenbreite<br />
p.zeichnePfeil();<br />
}</p>
<p>glPopMatrix();</p>
<p>p.setStartYPos(anlegenY);<br />
p.setStartZPos(anlegenZ -b1.getRadiusAussenBogen());<br />
}</p>
<p>void zielen ()<br />
{<br />
glPushMatrix();<br />
glTranslatef(anlegenX+8,anlegenY-4,anlegenZ);<br />
drawAnzeigeBalken();<br />
glPopMatrix();<br />
}</p>
<p>// beim Abschießen : istAngelegt = false</p>
<p>void schiessen (Pfeil&amp; p){</p>
<p>koordinatenAbfrage(p);</p>
<p>std::cout &lt;&lt; &quot;Pfeil im Flug?? &quot; &lt;&lt; (p.isPfeilImFlug() == GL_TRUE)&lt;&lt; &quot;\n&quot;;</p>
<p>// p.fliegt(links, hoch, getKraft()); // 3.Variable ist Anfangsgeschwinidigkeit<br />
p.fliegt(links, hoch, 50);</p>
<p>}</p>
<p>void keyboard ( unsigned char key, int x, int y)<br />
{<br />
if (istUnterbrochen == GL_TRUE){<br />
if(key == 'w' || key == 'W') // Spielstart oder nach Hilfeanzeige Spielfortsetzung<br />
istUnterbrochen = GL_FALSE;<br />
}</p>
<p>else {</p>
<p>if(imSpiel == GL_FALSE){<br />
if((key == 'p' || key == 'P') &amp;&amp; zumZielen == GL_FALSE){ // Anlegen nur mgl, wenn zuvor Schiessen<br />
istAngelegt = GL_TRUE;<br />
imSpiel = GL_TRUE;<br />
showPfeil = GL_TRUE;<br />
pfeilAktuell = pfeilWaehlen();<br />
// pfeilAktuell.setPfeilAktiv(GL_TRUE);<br />
}<br />
}<br />
else{<br />
if((key == 'z' || key == 'Z') &amp;&amp; zumSchiessen == GL_FALSE){// Zielen nur mgl, wenn zuvor Anlegen<br />
istAngelegt == GL_FALSE;<br />
showPfeil = GL_FALSE;<br />
zumZielen = GL_TRUE;<br />
}<br />
if((key == 's' || key =='S') ){// Schiessen nur mgl, wenn zuvor Zielen<br />
zumZielen == GL_FALSE;<br />
zumSchiessen = GL_TRUE;<br />
}</p>
<p>// if((key == 's' || key =='S') &amp;&amp; pfeilAnlegen == GL_FALSE){// Schiessen nur mgl, wenn zuvor Zielen<br />
// zumZielen == GL_FALSE;<br />
// zumSchiessen = GL_TRUE;<br />
}<br />
}</p>
<p>if(key == 'h' || key == 'H') // Hilfeanzeige<br />
istUnterbrochen = GL_TRUE;</p>
<p>if(showPfeil == GL_FALSE)<br />
zumZielen = GL_FALSE;</p>
<p>}</p>
<p>void special ( int key, int x, int y)<br />
{<br />
if (istAngelegt == GL_TRUE){</p>
<p>if(key == GLUT_KEY_LEFT &amp;&amp; links &lt;90 )<br />
links = links + delta;<br />
if(key == GLUT_KEY_RIGHT &amp;&amp; links &gt;-90)<br />
links = links - delta;<br />
if(key == GLUT_KEY_UP &amp;&amp; hoch &lt;90)<br />
hoch = hoch + delta;<br />
if(key == GLUT_KEY_DOWN &amp;&amp; hoch &gt;-90)<br />
hoch = hoch - delta;<br />
}</p>
<p>}</p>
<p>GLfloat abstandsBerechnung (GLfloat xZ, GLfloat yZ, GLfloat zZ, GLfloat xP, GLfloat yP, GLfloat zP)<br />
{ //{x,y,z}Z = Koordinaten der Zielscheibe, {x,y,z}P = Koordinaten des Pfeiles<br />
return sqrt( pow(xZ - xP, 2) + pow(yZ - yP, 2) + pow(zZ - zP, 2));<br />
}</p>
<p>GLint koordinatenAbfrageMitZielscheibeStock( Pfeil&amp; p){</p>
<p>GLfloat dS1 = abstandsBerechnung(z1.getXposStock(), 0.0f ,z1.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock<br />
GLfloat dZ1 = abstandsBerechnung(z1.getXposZielscheibe(), z1.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe</p>
<p>GLfloat dS2 = abstandsBerechnung(z2.getXposStock(), 0.0f , z2.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock<br />
GLfloat dZ2 = abstandsBerechnung(z2.getXposZielscheibe(), z2.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe</p>
<p>GLfloat dS3 = abstandsBerechnung(z3.getXposStock(), 0.0f , z3.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock<br />
GLfloat dZ3 = abstandsBerechnung(z3.getXposZielscheibe(), z3.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe</p>
<p>// std::cout &lt;&lt; z1.getXposStock()&lt;&lt; &quot; &quot; &lt;&lt; z1.getZposStock()&lt;&lt;&quot;\n&quot;;</p>
<p>// std::cout &lt;&lt; dS1&lt;&lt; &quot;\n&quot;;</p>
<p>if((dS1 &lt;= z1.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z1.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 1 getroffen<br />
return -1;<br />
else if (dZ1&lt;= radiusZ1 &amp;&amp; (p.getZPos() &gt;= (z1.getZposZielscheibe() -1.0) &amp;&amp; p.getZPos() &lt;= z1.getZposZielscheibe() )) // Pfeil hat Zielscheibe 1 getroffen<br />
return 1;<br />
else if((dS2 &lt;= z2.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z2.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 2 getroffen<br />
return -2;<br />
else if (dZ2&lt;= radiusZ2 &amp;&amp; (p.getZPos() &gt;= (z2.getZposZielscheibe() -1) &amp;&amp; p.getZPos() &lt;= z2.getZposZielscheibe())) // Pfeil hat Zielscheibe 2 getroffen<br />
return 2;<br />
else if((dS3 &lt;= z3.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z3.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 3 getroffen<br />
return -3;<br />
else if (dZ3&lt;= radiusZ3 &amp;&amp; (p.getZPos() &gt;= (z3.getZposZielscheibe() -1) &amp;&amp; p.getZPos() &lt;= z3.getZposZielscheibe())) // Pfeil hat Zielscheibe 3 getroffen<br />
return 3;<br />
else<br />
return 0;</p>
<p>}<br />
void koordinatenAbfrage (Pfeil&amp; p){</p>
<p>GLfloat ergebnisAbfrage = koordinatenAbfrageMitZielscheibeStock(p); // Abstandsvergleich zur Zielscheibe und Stock von Zielscheibe 1;</p>
<p>// std::cout &lt;&lt; &quot;Ergebnisabfrage &quot; &lt;&lt;ergebnisAbfrage &lt;&lt; &quot;\n&quot;;</p>
<p>if(p.getYPos() &lt; 0 || ergebnisAbfrage != 0){</p>
<p>// std:: cout &lt;&lt; &quot;Hallöle&quot;&lt;&lt; &quot;\n&quot;;</p>
<p>imSpiel = GL_FALSE;<br />
zumSchiessen = GL_FALSE;</p>
<p>p.setPfeilImFlug(GL_FALSE); // Pfeil hat etwas getroffen</p>
<p>// // Nur für Methode Umfallen von Bedeutung!!!!!<br />
// if(ergebnisAbfrage == 1) // dh. hat Zielscheibe und nicht Stock getroffen<br />
// z1.setGetroffen(GL_TRUE);<br />
// if(ergebnisAbfrage == 2) // dh. hat Zielscheibe und nicht Stock getroffen<br />
// z2.setGetroffen(GL_TRUE);<br />
// if(ergebnisAbfrage == 3) // dh. hat Zielscheibe und nicht Stock getroffen<br />
// z3.setGetroffen(GL_TRUE);</p>
<p>}<br />
}<br />
//</p>
<p>void pfeilFliegt(Pfeil&amp; p){<br />
koordinatenAbfrage(p);</p>
<p>p.fliegt(links, hoch, getKraft()); // 3.Variable ist Anfangsgeschwinidigkeit</p>
<p>}</p>
<p>void zielscheibeUndPfeilZeichnen(Pfeil&amp; p , Zielscheibe z, GLfloat xZ, GLfloat yZ, GLfloat zZ){</p>
<p>glPushMatrix(); // z1 Zielscheibe mit Stock zeichnen<br />
glTranslatef(xZ,yZ, zZ);<br />
z.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>glPushMatrix(); // Pfeil wird gezeichnet<br />
glTranslatef(p.getXPos(), p.getYPos(),p.getZPos()); // damit sichtbar wird<br />
p.zeichnePfeil();<br />
glPopMatrix();</p>
<p>}</p>
<p>//void umfallen(Pfeil p, Zielscheibe z, GLfloat xZ, GLfloat yZ, GLfloat zZ, GLfloat abstand, GLfloat rS){<br />
//<br />
// glPushMatrix();<br />
// glTranslatef(0.0f, 0.0f, (zZ + abstand -2<em>rS));<br />
// glRotatef(drehwinkel, 1.0f, 0.0f, 0.0f);<br />
// glTranslatef(0.0f, z.getRadiusStock(), -zZ - abstand +2.0f</em>rS);<br />
//<br />
// zielscheibeUndPfeilZeichnen(p, z, xZ, yZ, zZ);<br />
// glPopMatrix();<br />
//<br />
//<br />
// if (drehwinkel&gt;-90) {<br />
// drehwinkel = drehwinkel - 3.0f;<br />
// }<br />
//<br />
//<br />
//}</p>
<p>void aktionMitAktuellemPfeil (void){</p>
<p>if(istAngelegt == GL_TRUE)<br />
pfeilAnlegen(pfeilAktuell);</p>
<p>if(zumZielen == GL_TRUE){<br />
istAngelegt = GL_FALSE;<br />
zielen();<br />
}</p>
<p>if (zumSchiessen == GL_TRUE)<br />
schiessen(pfeilAktuell);</p>
<p>}</p>
<p>void zielscheibenZeichnen (void){</p>
<p>z1.setXposZielscheibe(0);<br />
z1.setZposZielscheibe(-20);<br />
glPushMatrix(); // z1 Zielscheibe mit Stock zeichnen<br />
glTranslatef(z1.getXposZielscheibe(), z1.getYposZielscheibe(), z1.getZposZielscheibe());<br />
z1.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>z2.setXposZielscheibe(8);<br />
z2.setZposZielscheibe(-30);<br />
glPushMatrix(); // z2 Zielscheibe mit Stock zeichnen<br />
glTranslatef(z2.getXposZielscheibe(), z2.getYposZielscheibe(), z2.getZposZielscheibe());<br />
z2.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>z3.setXposZielscheibe(-10);<br />
z3.setZposZielscheibe(-20);<br />
glPushMatrix(); // z2 Zielscheibe mit Stock zeichnen<br />
glTranslatef(z3.getXposZielscheibe(), z3.getYposZielscheibe(), z3.getZposZielscheibe());<br />
z3.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>}</p>
<p>void pfeileZeichnen(void){</p>
<p>// std::cout &lt;&lt; &quot;Hallo&quot; &lt;&lt; &quot;\n&quot;;</p>
<p>//pfeile[0] = pfeilAktuell;</p>
<p>for(int i = 0; i &lt; anzahlPfeile; i++){</p>
<p>std::cout &lt;&lt; &quot;Pfeil &quot; &lt;&lt; i &lt;&lt;&quot; : &quot; &lt;&lt; &quot;Aktiv?? &quot;&lt;&lt; (pfeile[i].isPfeilAktiv() == GL_TRUE) &lt;&lt; &quot; Flug?? &quot; &lt;&lt; (pfeile[i].isPfeilImFlug() == GL_FALSE) &lt;&lt;&quot;\n&quot;;</p>
<p>if(pfeile[i].isPfeilAktiv() == GL_TRUE &amp;&amp; pfeile[i].isPfeilImFlug() == GL_FALSE){</p>
<p>std::cout &lt;&lt; &quot;Pfeil&quot; &lt;&lt; i &lt;&lt;&quot;: wird gezeichnet&quot; &lt;&lt; &quot;\n&quot;;<br />
pfeile[i].zeichnePfeilNachHatGetroffen();<br />
}<br />
}</p>
<p>}</p>
<p>void drawScene(void){</p>
<p>glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);</p>
<p>if (istUnterbrochen)<br />
Textausgabe::printSpielanleitung();</p>
<p>else{</p>
<p>glLoadIdentity();<br />
// gluLookAt(15, 5,zZ1, 0,5,zZ1, 0,1,0); // Kamerapositon verändern<br />
// gluLookAt(0, 6,zZ1+6, 0,6,zZ1, 0,1,0); // Kamerapositon verändern<br />
// gluLookAt(0, 10,0, 0,8, 0, 0,1,0); // Kamerapositon verändern<br />
gluLookAt(10,5,0, 0,5, -20, 0,1,0); // Kamerapositon verändern</p>
<p>BodenUndHimmel::bodenUndHimmelZeichnen();<br />
zielscheibenZeichnen();<br />
pfeileZeichnen();</p>
<p>aktionMitAktuellemPfeil();</p>
<p>glutSwapBuffers();<br />
glutPostRedisplay();</p>
<p>}</p>
<p>}</p>
<p>void initLightning(void)<br />
{<br />
GLfloat lmodel_ambient [] = {0.5f, 0.5f, 0.5f, 1.0f}; // Hintergrundlicht</p>
<p>GLfloat light0_positon [] = {5.0f, 2.0f, -3, 1.0f};<br />
GLfloat light0_diffuse [] = {0.4f, 0.4f, 0.4f, 1.0f};<br />
GLfloat light0_specular [] = {0.8f, 0.8f, 0.8f, 1.0f};<br />
GLfloat light0_direction [] = {-1.0f, 0.0f, -0.75f};</p>
<p>GLfloat light1_positon [] = {0.0f, 3.0f, 0.0, 1.0f};<br />
GLfloat light1_diffuse [] = {0.8f, 0.8f, 0.8f, 1.0f};<br />
GLfloat light1_specular [] = {0.9f, 0.9f, 0.9f, 1.0f};<br />
GLfloat light1_direction [] = {0.0f, 0.0f, -1.0f};</p>
<p>// Strahler:: definiert GL_Light0 (von der Seite)<br />
glLightfv(GL_LIGHT0, GL_POSITION, light0_positon);<br />
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);<br />
glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);<br />
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light0_direction);<br />
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 100.0f); // Öffnungswinkel des Strahlers<br />
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 30.0f);</p>
<p>// Strahler:: definiert GL_Light1<br />
glLightfv(GL_LIGHT1, GL_POSITION, light1_positon);<br />
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);<br />
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);<br />
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light1_direction);<br />
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 5.0f); // Öffnungswinkel des Strahlers<br />
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 100.0f);</p>
<p>glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); // Hintergrundlicht</p>
<p>glEnable(GL_LIGHTING);<br />
glEnable(GL_LIGHT0);<br />
glEnable(GL_LIGHT1);<br />
}</p>
<p>void init(void)<br />
{<br />
glClearColor(0.0, 0.0, 0.0, 0.0);</p>
<p>glEnable(GL_DEPTH_TEST);</p>
<p>z1 = Zielscheibe(abstandZ1, radiusZ1);<br />
z2 = Zielscheibe(abstandZ2, radiusZ2);<br />
z3 = Zielscheibe(abstandZ3, radiusZ3);</p>
<p>pfeile[0]= Pfeil();<br />
pfeile[1]= Pfeil();<br />
pfeile[2]= Pfeil();<br />
pfeile[3]= Pfeil();<br />
pfeile[4]= Pfeil();<br />
pfeile[5]= Pfeil();<br />
b1 = Bogen();</p>
<p>glutKeyboardFunc(keyboard);<br />
glutSpecialFunc(special);</p>
<p>initLightning();</p>
<p>}</p>
<p>void reshape(int w, int h)<br />
{<br />
glViewport( 0, 0, w, h );<br />
glMatrixMode(GL_PROJECTION);<br />
glLoadIdentity();</p>
<p>if(istUnterbrochen)<br />
glOrtho(-10, 10, -10, 10, -10, 10);<br />
else<br />
gluPerspective(90, 1, 1, 500);</p>
<p>glMatrixMode(GL_MODELVIEW);<br />
glLoadIdentity();<br />
}</p>
<p>int main(int argc, char **argv)<br />
{<br />
glutInit(&amp;argc, argv);<br />
glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB | GLUT_DEPTH);<br />
glutInitWindowSize(750, 750);<br />
glutInitWindowPosition(100, 100);<br />
glutCreateWindow(&quot;Bogenschießen&quot;);<br />
init();<br />
glutReshapeFunc(reshape);<br />
glutDisplayFunc(drawScene);<br />
glutMainLoop();<br />
return(0);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311043/referenzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 00:32:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311043.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Nov 2012 16:50:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenzen on Sun, 25 Nov 2012 16:50:43 GMT]]></title><description><![CDATA[<p>Hallo, ich hab vieles versucht komme aber nicht weiter. und zwar<br />
in der Methode pfeilWählen, wird ein Pfeil-Objekt ausgewählt .<br />
Dieses Objekt wird dann in der Mehtode Keyboard in pfeilAktuell gespeichert.<br />
Meine Frage, wie bekomm ich das hin, dass alles was mit pfeilAktuell gemacht wird auch in meinem ausgewähltes Pfeilobjekt gespeichert wird??</p>
<p>Vielen Dank für euere Hilfe im Vorraus. ich hoff dass der Code, vllt. doch ein wenig überischtlich ist.</p>
<p>#include &lt;cmath&gt;<br />
#include &lt;iostream&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;GL/glut.h&gt;</p>
<p>#include &quot;Zielscheibe.h&quot;<br />
#include &quot;Scheibe.h&quot;<br />
#include &quot;Pfeil.h&quot;<br />
#include &quot;Bogen.h&quot;<br />
//#include &quot;ZylinderBogen.h&quot;<br />
#include &quot;Kegel.h&quot;<br />
#include &quot;Rechteck.h&quot;<br />
#include &quot;Textausgabe.h&quot;<br />
#include &quot;BodenUndHimmel.h&quot;</p>
<p>//GLfloat winkel =3;</p>
<p>GLfloat drehwinkel = 0.0f; // fürs Umfallen</p>
<p>// Zielscheibe 1 mit Stock<br />
GLfloat abstandZ1 =-1; // wichtig immer negativ!!!! // Dicke der Zielscheibe<br />
GLfloat radiusZ1 = 3; // Radius der Zielscheibe<br />
Zielscheibe z1(abstandZ1, radiusZ1);</p>
<p>// Zielscheibe 2 mit Stock<br />
GLfloat abstandZ2 =-1; // wichtig immer negativ!!!!<br />
GLfloat radiusZ2 = 3;<br />
Zielscheibe z2(abstandZ2, radiusZ2);</p>
<p>// Zielscheibe 3 mit Stock<br />
GLfloat abstandZ3 =-1; // wichtig immer negativ!!!!<br />
GLfloat radiusZ3 = 3;<br />
Zielscheibe z3(abstandZ3, radiusZ3);</p>
<p>Pfeil pfeilAktuell;<br />
const int anzahlPfeile = 6;<br />
Pfeil pfeile[anzahlPfeile];</p>
<p>GLfloat anlegenX = 0;<br />
GLfloat anlegenY = 5;<br />
GLfloat anlegenZ= -10;</p>
<p>GLboolean showPfeil = GL_FALSE;</p>
<p>//Bogendrehung<br />
GLfloat hoch = 0;<br />
GLfloat links = 0;<br />
GLfloat delta = 5;<br />
//Krafteinstellung<br />
GLfloat strecke;<br />
GLfloat delta_Anzeige = 0.075;<br />
GLboolean istOben = GL_TRUE;<br />
GLboolean weiter = GL_TRUE;</p>
<p>GLboolean imSpiel = GL_FALSE;<br />
GLboolean istAngelegt = GL_FALSE;<br />
GLboolean zumZielen = GL_FALSE;<br />
GLboolean zumSchiessen = GL_FALSE;<br />
GLboolean istUnterbrochen = GL_TRUE; // eigelt. auf true</p>
<p>//Bogen<br />
Bogen b1;</p>
<p>//Prototypen<br />
void bodenZeichnen (void);<br />
void himmelZeichnen (void);<br />
GLfloat abstandsBerechnung (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);<br />
GLint koordinatenAbfrageMitZielscheibeStock(Pfeil, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat , GLfloat, GLfloat);<br />
void koordinatenAbfrage (Pfeil&amp;);<br />
void pfeilFliegt(Pfeil);<br />
void zielscheibeUndPfeilZeichnen(Pfeil, Zielscheibe, GLfloat, GLfloat, GLfloat);<br />
void umfallen(Pfeil, Zielscheibe, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);<br />
void drawScene(void);<br />
void pfeilWaehlen(unsigned char, int, int);<br />
void initLightning(void);<br />
void keyboard(unsigned char, int, int);<br />
//void drawBitmapString(void, char);<br />
//void drawStrokeString(void, char);<br />
void printHilfsanweisung();<br />
void printSpielanleitung();</p>
<p>void drawAnzeigeBalken(void)<br />
{<br />
Rechteck r1,r2, r3, r4, r5, r6;</p>
<p>glDisable(GL_LIGHTING);</p>
<p>glPushMatrix();</p>
<p>r1.zeichneAnzeigeBalken(1.0f, 3.0f, 0.0f, 0.0f);<br />
r2.zeichneRechteck(2.0, 0.5, 0.0, -1.75);<br />
r3.zeichneRechteck(2.0, 0.5, 0.0, 1.75);<br />
r4.zeichneRechteck(0.5, 3.0, 0.75, 0.0);<br />
r5.zeichneRechteck(0.5, 3.0, -0.75, 0.0);</p>
<p>if(istOben){<br />
if(strecke&lt;=1.5)<br />
strecke = strecke + delta_Anzeige;<br />
else<br />
istOben = false;<br />
}<br />
else{<br />
if(strecke &gt;= -1.5)<br />
strecke = strecke - delta_Anzeige;<br />
else<br />
istOben = true;<br />
}</p>
<p>glTranslatef(0.0, strecke, 0.0);<br />
r6.zeichneDreieck();</p>
<p>glPopMatrix();</p>
<p>glEnable(GL_LIGHTING);</p>
<p>}</p>
<p>float getKraft() // wird bei der Schussstärke benötigt<br />
{<br />
GLfloat kraft = strecke + 2.5f;<br />
return kraft *200;<br />
}</p>
<p>Pfeil pfeilWaehlen(void){</p>
<p>for (int i = 0; i&lt; anzahlPfeile; i++){<br />
if(pfeile[i].isPfeilAktiv() == GL_FALSE){<br />
// pfeile[i].setPfeilAktiv(GL_TRUE);<br />
return pfeile[i];<br />
}</p>
<p>// // es gibt keine Pfeile mehr -&gt;Game over<br />
}</p>
<p>}</p>
<p>void pfeilAnlegen(Pfeil&amp; p)<br />
{</p>
<p>glPushMatrix();<br />
glTranslatef(0,anlegenY,anlegenZ);</p>
<p>glRotatef(links, 0, 1, 0);<br />
glRotatef(hoch, 1, 0, 0);<br />
b1.bogenMitSehne();<br />
if(showPfeil){// !!!!!!!!!!!?????????????<br />
glRotatef(90, 1, 0, 0);<br />
glTranslatef(0.0f, p.getRadiusPfeil(), -b1.getRadiusAussenBogen()); //letzter Parameter bezieht sich auf Bogenbreite<br />
p.zeichnePfeil();<br />
}</p>
<p>glPopMatrix();</p>
<p>p.setStartYPos(anlegenY);<br />
p.setStartZPos(anlegenZ -b1.getRadiusAussenBogen());<br />
}</p>
<p>void zielen ()<br />
{<br />
glPushMatrix();<br />
glTranslatef(anlegenX+8,anlegenY-4,anlegenZ);<br />
drawAnzeigeBalken();<br />
glPopMatrix();<br />
}</p>
<p>// beim Abschießen : istAngelegt = false</p>
<p>void schiessen (Pfeil&amp; p){</p>
<p>koordinatenAbfrage(p);</p>
<p>std::cout &lt;&lt; &quot;Pfeil im Flug?? &quot; &lt;&lt; (p.isPfeilImFlug() == GL_TRUE)&lt;&lt; &quot;\n&quot;;</p>
<p>// p.fliegt(links, hoch, getKraft()); // 3.Variable ist Anfangsgeschwinidigkeit<br />
p.fliegt(links, hoch, 50);</p>
<p>}</p>
<p>void keyboard ( unsigned char key, int x, int y)<br />
{<br />
if (istUnterbrochen == GL_TRUE){<br />
if(key == 'w' || key == 'W') // Spielstart oder nach Hilfeanzeige Spielfortsetzung<br />
istUnterbrochen = GL_FALSE;<br />
}</p>
<p>else {</p>
<p>if(imSpiel == GL_FALSE){<br />
if((key == 'p' || key == 'P') &amp;&amp; zumZielen == GL_FALSE){ // Anlegen nur mgl, wenn zuvor Schiessen<br />
istAngelegt = GL_TRUE;<br />
imSpiel = GL_TRUE;<br />
showPfeil = GL_TRUE;<br />
pfeilAktuell = pfeilWaehlen();<br />
// pfeilAktuell.setPfeilAktiv(GL_TRUE);<br />
}<br />
}<br />
else{<br />
if((key == 'z' || key == 'Z') &amp;&amp; zumSchiessen == GL_FALSE){// Zielen nur mgl, wenn zuvor Anlegen<br />
istAngelegt == GL_FALSE;<br />
showPfeil = GL_FALSE;<br />
zumZielen = GL_TRUE;<br />
}<br />
if((key == 's' || key =='S') ){// Schiessen nur mgl, wenn zuvor Zielen<br />
zumZielen == GL_FALSE;<br />
zumSchiessen = GL_TRUE;<br />
}</p>
<p>// if((key == 's' || key =='S') &amp;&amp; pfeilAnlegen == GL_FALSE){// Schiessen nur mgl, wenn zuvor Zielen<br />
// zumZielen == GL_FALSE;<br />
// zumSchiessen = GL_TRUE;<br />
}<br />
}</p>
<p>if(key == 'h' || key == 'H') // Hilfeanzeige<br />
istUnterbrochen = GL_TRUE;</p>
<p>if(showPfeil == GL_FALSE)<br />
zumZielen = GL_FALSE;</p>
<p>}</p>
<p>void special ( int key, int x, int y)<br />
{<br />
if (istAngelegt == GL_TRUE){</p>
<p>if(key == GLUT_KEY_LEFT &amp;&amp; links &lt;90 )<br />
links = links + delta;<br />
if(key == GLUT_KEY_RIGHT &amp;&amp; links &gt;-90)<br />
links = links - delta;<br />
if(key == GLUT_KEY_UP &amp;&amp; hoch &lt;90)<br />
hoch = hoch + delta;<br />
if(key == GLUT_KEY_DOWN &amp;&amp; hoch &gt;-90)<br />
hoch = hoch - delta;<br />
}</p>
<p>}</p>
<p>GLfloat abstandsBerechnung (GLfloat xZ, GLfloat yZ, GLfloat zZ, GLfloat xP, GLfloat yP, GLfloat zP)<br />
{ //{x,y,z}Z = Koordinaten der Zielscheibe, {x,y,z}P = Koordinaten des Pfeiles<br />
return sqrt( pow(xZ - xP, 2) + pow(yZ - yP, 2) + pow(zZ - zP, 2));<br />
}</p>
<p>GLint koordinatenAbfrageMitZielscheibeStock( Pfeil&amp; p){</p>
<p>GLfloat dS1 = abstandsBerechnung(z1.getXposStock(), 0.0f ,z1.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock<br />
GLfloat dZ1 = abstandsBerechnung(z1.getXposZielscheibe(), z1.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe</p>
<p>GLfloat dS2 = abstandsBerechnung(z2.getXposStock(), 0.0f , z2.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock<br />
GLfloat dZ2 = abstandsBerechnung(z2.getXposZielscheibe(), z2.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe</p>
<p>GLfloat dS3 = abstandsBerechnung(z3.getXposStock(), 0.0f , z3.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock<br />
GLfloat dZ3 = abstandsBerechnung(z3.getXposZielscheibe(), z3.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe</p>
<p>// std::cout &lt;&lt; z1.getXposStock()&lt;&lt; &quot; &quot; &lt;&lt; z1.getZposStock()&lt;&lt;&quot;\n&quot;;</p>
<p>// std::cout &lt;&lt; dS1&lt;&lt; &quot;\n&quot;;</p>
<p>if((dS1 &lt;= z1.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z1.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 1 getroffen<br />
return -1;<br />
else if (dZ1&lt;= radiusZ1 &amp;&amp; (p.getZPos() &gt;= (z1.getZposZielscheibe() -1.0) &amp;&amp; p.getZPos() &lt;= z1.getZposZielscheibe() )) // Pfeil hat Zielscheibe 1 getroffen<br />
return 1;<br />
else if((dS2 &lt;= z2.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z2.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 2 getroffen<br />
return -2;<br />
else if (dZ2&lt;= radiusZ2 &amp;&amp; (p.getZPos() &gt;= (z2.getZposZielscheibe() -1) &amp;&amp; p.getZPos() &lt;= z2.getZposZielscheibe())) // Pfeil hat Zielscheibe 2 getroffen<br />
return 2;<br />
else if((dS3 &lt;= z3.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z3.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 3 getroffen<br />
return -3;<br />
else if (dZ3&lt;= radiusZ3 &amp;&amp; (p.getZPos() &gt;= (z3.getZposZielscheibe() -1) &amp;&amp; p.getZPos() &lt;= z3.getZposZielscheibe())) // Pfeil hat Zielscheibe 3 getroffen<br />
return 3;<br />
else<br />
return 0;</p>
<p>}<br />
void koordinatenAbfrage (Pfeil&amp; p){</p>
<p>GLfloat ergebnisAbfrage = koordinatenAbfrageMitZielscheibeStock(p); // Abstandsvergleich zur Zielscheibe und Stock von Zielscheibe 1;</p>
<p>// std::cout &lt;&lt; &quot;Ergebnisabfrage &quot; &lt;&lt;ergebnisAbfrage &lt;&lt; &quot;\n&quot;;</p>
<p>if(p.getYPos() &lt; 0 || ergebnisAbfrage != 0){</p>
<p>// std:: cout &lt;&lt; &quot;Hallöle&quot;&lt;&lt; &quot;\n&quot;;</p>
<p>imSpiel = GL_FALSE;<br />
zumSchiessen = GL_FALSE;</p>
<p>p.setPfeilImFlug(GL_FALSE); // Pfeil hat etwas getroffen</p>
<p>// // Nur für Methode Umfallen von Bedeutung!!!!!<br />
// if(ergebnisAbfrage == 1) // dh. hat Zielscheibe und nicht Stock getroffen<br />
// z1.setGetroffen(GL_TRUE);<br />
// if(ergebnisAbfrage == 2) // dh. hat Zielscheibe und nicht Stock getroffen<br />
// z2.setGetroffen(GL_TRUE);<br />
// if(ergebnisAbfrage == 3) // dh. hat Zielscheibe und nicht Stock getroffen<br />
// z3.setGetroffen(GL_TRUE);</p>
<p>}<br />
}<br />
//</p>
<p>void pfeilFliegt(Pfeil&amp; p){<br />
koordinatenAbfrage(p);</p>
<p>p.fliegt(links, hoch, getKraft()); // 3.Variable ist Anfangsgeschwinidigkeit</p>
<p>}</p>
<p>void zielscheibeUndPfeilZeichnen(Pfeil&amp; p , Zielscheibe z, GLfloat xZ, GLfloat yZ, GLfloat zZ){</p>
<p>glPushMatrix(); // z1 Zielscheibe mit Stock zeichnen<br />
glTranslatef(xZ,yZ, zZ);<br />
z.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>glPushMatrix(); // Pfeil wird gezeichnet<br />
glTranslatef(p.getXPos(), p.getYPos(),p.getZPos()); // damit sichtbar wird<br />
p.zeichnePfeil();<br />
glPopMatrix();</p>
<p>}</p>
<p>//void umfallen(Pfeil p, Zielscheibe z, GLfloat xZ, GLfloat yZ, GLfloat zZ, GLfloat abstand, GLfloat rS){<br />
//<br />
// glPushMatrix();<br />
// glTranslatef(0.0f, 0.0f, (zZ + abstand -2<em>rS));<br />
// glRotatef(drehwinkel, 1.0f, 0.0f, 0.0f);<br />
// glTranslatef(0.0f, z.getRadiusStock(), -zZ - abstand +2.0f</em>rS);<br />
//<br />
// zielscheibeUndPfeilZeichnen(p, z, xZ, yZ, zZ);<br />
// glPopMatrix();<br />
//<br />
//<br />
// if (drehwinkel&gt;-90) {<br />
// drehwinkel = drehwinkel - 3.0f;<br />
// }<br />
//<br />
//<br />
//}</p>
<p>void aktionMitAktuellemPfeil (void){</p>
<p>if(istAngelegt == GL_TRUE)<br />
pfeilAnlegen(pfeilAktuell);</p>
<p>if(zumZielen == GL_TRUE){<br />
istAngelegt = GL_FALSE;<br />
zielen();<br />
}</p>
<p>if (zumSchiessen == GL_TRUE)<br />
schiessen(pfeilAktuell);</p>
<p>}</p>
<p>void zielscheibenZeichnen (void){</p>
<p>z1.setXposZielscheibe(0);<br />
z1.setZposZielscheibe(-20);<br />
glPushMatrix(); // z1 Zielscheibe mit Stock zeichnen<br />
glTranslatef(z1.getXposZielscheibe(), z1.getYposZielscheibe(), z1.getZposZielscheibe());<br />
z1.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>z2.setXposZielscheibe(8);<br />
z2.setZposZielscheibe(-30);<br />
glPushMatrix(); // z2 Zielscheibe mit Stock zeichnen<br />
glTranslatef(z2.getXposZielscheibe(), z2.getYposZielscheibe(), z2.getZposZielscheibe());<br />
z2.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>z3.setXposZielscheibe(-10);<br />
z3.setZposZielscheibe(-20);<br />
glPushMatrix(); // z2 Zielscheibe mit Stock zeichnen<br />
glTranslatef(z3.getXposZielscheibe(), z3.getYposZielscheibe(), z3.getZposZielscheibe());<br />
z3.stockZielscheibeZeichnen();<br />
glPopMatrix();</p>
<p>}</p>
<p>void pfeileZeichnen(void){</p>
<p>// std::cout &lt;&lt; &quot;Hallo&quot; &lt;&lt; &quot;\n&quot;;</p>
<p>//pfeile[0] = pfeilAktuell;</p>
<p>for(int i = 0; i &lt; anzahlPfeile; i++){</p>
<p>std::cout &lt;&lt; &quot;Pfeil &quot; &lt;&lt; i &lt;&lt;&quot; : &quot; &lt;&lt; &quot;Aktiv?? &quot;&lt;&lt; (pfeile[i].isPfeilAktiv() == GL_TRUE) &lt;&lt; &quot; Flug?? &quot; &lt;&lt; (pfeile[i].isPfeilImFlug() == GL_FALSE) &lt;&lt;&quot;\n&quot;;</p>
<p>if(pfeile[i].isPfeilAktiv() == GL_TRUE &amp;&amp; pfeile[i].isPfeilImFlug() == GL_FALSE){</p>
<p>std::cout &lt;&lt; &quot;Pfeil&quot; &lt;&lt; i &lt;&lt;&quot;: wird gezeichnet&quot; &lt;&lt; &quot;\n&quot;;<br />
pfeile[i].zeichnePfeilNachHatGetroffen();<br />
}<br />
}</p>
<p>}</p>
<p>void drawScene(void){</p>
<p>glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);</p>
<p>if (istUnterbrochen)<br />
Textausgabe::printSpielanleitung();</p>
<p>else{</p>
<p>glLoadIdentity();<br />
// gluLookAt(15, 5,zZ1, 0,5,zZ1, 0,1,0); // Kamerapositon verändern<br />
// gluLookAt(0, 6,zZ1+6, 0,6,zZ1, 0,1,0); // Kamerapositon verändern<br />
// gluLookAt(0, 10,0, 0,8, 0, 0,1,0); // Kamerapositon verändern<br />
gluLookAt(10,5,0, 0,5, -20, 0,1,0); // Kamerapositon verändern</p>
<p>BodenUndHimmel::bodenUndHimmelZeichnen();<br />
zielscheibenZeichnen();<br />
pfeileZeichnen();</p>
<p>aktionMitAktuellemPfeil();</p>
<p>glutSwapBuffers();<br />
glutPostRedisplay();</p>
<p>}</p>
<p>}</p>
<p>void initLightning(void)<br />
{<br />
GLfloat lmodel_ambient [] = {0.5f, 0.5f, 0.5f, 1.0f}; // Hintergrundlicht</p>
<p>GLfloat light0_positon [] = {5.0f, 2.0f, -3, 1.0f};<br />
GLfloat light0_diffuse [] = {0.4f, 0.4f, 0.4f, 1.0f};<br />
GLfloat light0_specular [] = {0.8f, 0.8f, 0.8f, 1.0f};<br />
GLfloat light0_direction [] = {-1.0f, 0.0f, -0.75f};</p>
<p>GLfloat light1_positon [] = {0.0f, 3.0f, 0.0, 1.0f};<br />
GLfloat light1_diffuse [] = {0.8f, 0.8f, 0.8f, 1.0f};<br />
GLfloat light1_specular [] = {0.9f, 0.9f, 0.9f, 1.0f};<br />
GLfloat light1_direction [] = {0.0f, 0.0f, -1.0f};</p>
<p>// Strahler:: definiert GL_Light0 (von der Seite)<br />
glLightfv(GL_LIGHT0, GL_POSITION, light0_positon);<br />
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);<br />
glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);<br />
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light0_direction);<br />
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 100.0f); // Öffnungswinkel des Strahlers<br />
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 30.0f);</p>
<p>// Strahler:: definiert GL_Light1<br />
glLightfv(GL_LIGHT1, GL_POSITION, light1_positon);<br />
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);<br />
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);<br />
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light1_direction);<br />
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 5.0f); // Öffnungswinkel des Strahlers<br />
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 100.0f);</p>
<p>glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); // Hintergrundlicht</p>
<p>glEnable(GL_LIGHTING);<br />
glEnable(GL_LIGHT0);<br />
glEnable(GL_LIGHT1);<br />
}</p>
<p>void init(void)<br />
{<br />
glClearColor(0.0, 0.0, 0.0, 0.0);</p>
<p>glEnable(GL_DEPTH_TEST);</p>
<p>z1 = Zielscheibe(abstandZ1, radiusZ1);<br />
z2 = Zielscheibe(abstandZ2, radiusZ2);<br />
z3 = Zielscheibe(abstandZ3, radiusZ3);</p>
<p>pfeile[0]= Pfeil();<br />
pfeile[1]= Pfeil();<br />
pfeile[2]= Pfeil();<br />
pfeile[3]= Pfeil();<br />
pfeile[4]= Pfeil();<br />
pfeile[5]= Pfeil();<br />
b1 = Bogen();</p>
<p>glutKeyboardFunc(keyboard);<br />
glutSpecialFunc(special);</p>
<p>initLightning();</p>
<p>}</p>
<p>void reshape(int w, int h)<br />
{<br />
glViewport( 0, 0, w, h );<br />
glMatrixMode(GL_PROJECTION);<br />
glLoadIdentity();</p>
<p>if(istUnterbrochen)<br />
glOrtho(-10, 10, -10, 10, -10, 10);<br />
else<br />
gluPerspective(90, 1, 1, 500);</p>
<p>glMatrixMode(GL_MODELVIEW);<br />
glLoadIdentity();<br />
}</p>
<p>int main(int argc, char **argv)<br />
{<br />
glutInit(&amp;argc, argv);<br />
glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB | GLUT_DEPTH);<br />
glutInitWindowSize(750, 750);<br />
glutInitWindowPosition(100, 100);<br />
glutCreateWindow(&quot;Bogenschießen&quot;);<br />
init();<br />
glutReshapeFunc(reshape);<br />
glutDisplayFunc(drawScene);<br />
glutMainLoop();<br />
return(0);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274547</guid><dc:creator><![CDATA[IchLiebeMathe]]></dc:creator><pubDate>Sun, 25 Nov 2012 16:50:43 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen on Sun, 25 Nov 2012 16:54:06 GMT]]></title><description><![CDATA[<pre><code>#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &lt;GL/glut.h&gt;

#include &quot;Zielscheibe.h&quot;
#include &quot;Scheibe.h&quot;
#include &quot;Pfeil.h&quot;
#include &quot;Bogen.h&quot;
//#include &quot;ZylinderBogen.h&quot;
#include &quot;Kegel.h&quot;
#include &quot;Rechteck.h&quot;
#include &quot;Textausgabe.h&quot;
#include &quot;BodenUndHimmel.h&quot;

//GLfloat winkel =3;

GLfloat drehwinkel = 0.0f; // fürs Umfallen

// Zielscheibe 1 mit Stock
GLfloat abstandZ1 =-1; // wichtig immer negativ!!!! // Dicke der Zielscheibe
GLfloat radiusZ1 = 3; // Radius der Zielscheibe
Zielscheibe z1(abstandZ1, radiusZ1);

// Zielscheibe 2 mit Stock
GLfloat abstandZ2 =-1; // wichtig immer negativ!!!!
GLfloat radiusZ2 = 3;
Zielscheibe z2(abstandZ2, radiusZ2);

// Zielscheibe 3 mit Stock
GLfloat abstandZ3 =-1; // wichtig immer negativ!!!!
GLfloat radiusZ3 = 3;
Zielscheibe z3(abstandZ3, radiusZ3);

Pfeil pfeilAktuell;
const int anzahlPfeile = 6;
Pfeil pfeile[anzahlPfeile];

GLfloat anlegenX = 0;
GLfloat anlegenY = 5;
GLfloat anlegenZ= -10;

GLboolean showPfeil = GL_FALSE;

//Bogendrehung
GLfloat hoch = 0;
GLfloat links = 0;
GLfloat delta = 5;
//Krafteinstellung
GLfloat strecke;
GLfloat delta_Anzeige = 0.075;
GLboolean istOben = GL_TRUE;
GLboolean weiter = GL_TRUE;

GLboolean imSpiel = GL_FALSE;
GLboolean istAngelegt = GL_FALSE;
GLboolean zumZielen = GL_FALSE;
GLboolean zumSchiessen = GL_FALSE;
GLboolean istUnterbrochen = GL_TRUE; // eigelt. auf true

//Bogen
Bogen b1;

//Prototypen
void bodenZeichnen (void);
void himmelZeichnen (void);
GLfloat abstandsBerechnung (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
GLint koordinatenAbfrageMitZielscheibeStock(Pfeil, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat , GLfloat, GLfloat);
void koordinatenAbfrage (Pfeil&amp;);
void pfeilFliegt(Pfeil);
void zielscheibeUndPfeilZeichnen(Pfeil, Zielscheibe, GLfloat, GLfloat, GLfloat);
void umfallen(Pfeil, Zielscheibe, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
void drawScene(void);
void pfeilWaehlen(unsigned char, int, int);
void initLightning(void);
void keyboard(unsigned char, int, int);
//void drawBitmapString(void, char);
//void drawStrokeString(void, char);
void printHilfsanweisung();
void printSpielanleitung();

void drawAnzeigeBalken(void)
{
	Rechteck r1,r2, r3, r4, r5, r6;

	glDisable(GL_LIGHTING);

	glPushMatrix();

	r1.zeichneAnzeigeBalken(1.0f, 3.0f, 0.0f, 0.0f);
	r2.zeichneRechteck(2.0, 0.5, 0.0, -1.75);
	r3.zeichneRechteck(2.0, 0.5, 0.0, 1.75);
	r4.zeichneRechteck(0.5, 3.0, 0.75, 0.0);
	r5.zeichneRechteck(0.5, 3.0, -0.75, 0.0);

	if(istOben){
		if(strecke&lt;=1.5)
			strecke = strecke + delta_Anzeige;
		else
			istOben = false;
	}
	else{
		if(strecke &gt;= -1.5)
			strecke = strecke - delta_Anzeige;
		else
			istOben = true;
	}

	glTranslatef(0.0, strecke, 0.0);
	r6.zeichneDreieck();

	glPopMatrix();

	glEnable(GL_LIGHTING);

}

float getKraft() // wird bei der Schussstärke benötigt
{
	GLfloat kraft = strecke + 2.5f;
	return kraft *200;
}

Pfeil pfeilWaehlen(void){

	for (int i = 0; i&lt; anzahlPfeile; i++){
		if(pfeile[i].isPfeilAktiv() == GL_FALSE){
			// pfeile[i].setPfeilAktiv(GL_TRUE);
			return pfeile[i];
		}

		// // es gibt keine Pfeile mehr -&gt;Game over
	}

}

void pfeilAnlegen(Pfeil&amp; p)
{

	glPushMatrix();
	glTranslatef(0,anlegenY,anlegenZ);

	glRotatef(links, 0, 1, 0);
	glRotatef(hoch, 1, 0, 0);
	b1.bogenMitSehne();
	if(showPfeil){// !!!!!!!!!!!?????????????
		glRotatef(90, 1, 0, 0);
		glTranslatef(0.0f, p.getRadiusPfeil(), -b1.getRadiusAussenBogen()); //letzter Parameter bezieht sich auf Bogenbreite
		p.zeichnePfeil();
	}

	glPopMatrix();

	p.setStartYPos(anlegenY);
	p.setStartZPos(anlegenZ -b1.getRadiusAussenBogen());
}

void zielen ()
{
	glPushMatrix();
	glTranslatef(anlegenX+8,anlegenY-4,anlegenZ);
	drawAnzeigeBalken();
	glPopMatrix();
}

// beim Abschießen : istAngelegt = false

void schiessen (Pfeil&amp; p){

	koordinatenAbfrage(p);

	std::cout &lt;&lt; &quot;Pfeil im Flug?? &quot; &lt;&lt; (p.isPfeilImFlug() == GL_TRUE)&lt;&lt; &quot;\n&quot;;

	// p.fliegt(links, hoch, getKraft()); // 3.Variable ist Anfangsgeschwinidigkeit
	p.fliegt(links, hoch, 50);

}

void keyboard ( unsigned char key, int x, int y)
{
	if (istUnterbrochen == GL_TRUE){
		if(key == 'w' || key == 'W') // Spielstart oder nach Hilfeanzeige Spielfortsetzung
			istUnterbrochen = GL_FALSE;
	}

	else {

		if(imSpiel == GL_FALSE){
			if((key == 'p' || key == 'P') &amp;&amp; zumZielen == GL_FALSE){ // Anlegen nur mgl, wenn zuvor Schiessen
				istAngelegt = GL_TRUE;
				imSpiel = GL_TRUE;
				showPfeil = GL_TRUE;
				pfeilAktuell = pfeilWaehlen();
				// pfeilAktuell.setPfeilAktiv(GL_TRUE);
			}
		}
		else{
			if((key == 'z' || key == 'Z') &amp;&amp; zumSchiessen == GL_FALSE){// Zielen nur mgl, wenn zuvor Anlegen
				istAngelegt == GL_FALSE;
				showPfeil = GL_FALSE;
				zumZielen = GL_TRUE;
			}
			if((key == 's' || key =='S') ){// Schiessen nur mgl, wenn zuvor Zielen
				zumZielen == GL_FALSE;
				zumSchiessen = GL_TRUE;
			}

			// if((key == 's' || key =='S') &amp;&amp; pfeilAnlegen == GL_FALSE){// Schiessen nur mgl, wenn zuvor Zielen
			// zumZielen == GL_FALSE;
			// zumSchiessen = GL_TRUE;
		}
	}

	if(key == 'h' || key == 'H') // Hilfeanzeige
		istUnterbrochen = GL_TRUE;

	if(showPfeil == GL_FALSE)
		zumZielen = GL_FALSE;

}

void special ( int key, int x, int y)
{
	if (istAngelegt == GL_TRUE){

		if(key == GLUT_KEY_LEFT &amp;&amp; links &lt;90 )
			links = links + delta;
		if(key == GLUT_KEY_RIGHT &amp;&amp; links &gt;-90)
			links = links - delta;
		if(key == GLUT_KEY_UP &amp;&amp; hoch &lt;90)
			hoch = hoch + delta;
		if(key == GLUT_KEY_DOWN &amp;&amp; hoch &gt;-90)
			hoch = hoch - delta;
	}

}

GLfloat abstandsBerechnung (GLfloat xZ, GLfloat yZ, GLfloat zZ, GLfloat xP, GLfloat yP, GLfloat zP)
{ //{x,y,z}Z = Koordinaten der Zielscheibe, {x,y,z}P = Koordinaten des Pfeiles
	return sqrt( pow(xZ - xP, 2) + pow(yZ - yP, 2) + pow(zZ - zP, 2));
}

GLint koordinatenAbfrageMitZielscheibeStock( Pfeil&amp; p){

	GLfloat dS1 = abstandsBerechnung(z1.getXposStock(), 0.0f ,z1.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock
	GLfloat dZ1 = abstandsBerechnung(z1.getXposZielscheibe(), z1.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe

	GLfloat dS2 = abstandsBerechnung(z2.getXposStock(), 0.0f , z2.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock
	GLfloat dZ2 = abstandsBerechnung(z2.getXposZielscheibe(), z2.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe

	GLfloat dS3 = abstandsBerechnung(z3.getXposStock(), 0.0f , z3.getZposStock(), p.getXPos(), 0.0f, p.getZPos()); // Stock
	GLfloat dZ3 = abstandsBerechnung(z3.getXposZielscheibe(), z3.getYposZielscheibe(), 0.0, p.getXPos(), p.getYPos(), 0.0); // Zielscheibe

	// std::cout &lt;&lt; z1.getXposStock()&lt;&lt; &quot; &quot; &lt;&lt; z1.getZposStock()&lt;&lt;&quot;\n&quot;;

	// std::cout &lt;&lt; dS1&lt;&lt; &quot;\n&quot;;

	if((dS1 &lt;= z1.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z1.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 1 getroffen
		return -1;
	else if (dZ1&lt;= radiusZ1 &amp;&amp; (p.getZPos() &gt;= (z1.getZposZielscheibe() -1.0) &amp;&amp; p.getZPos() &lt;= z1.getZposZielscheibe() )) // Pfeil hat Zielscheibe 1 getroffen
		return 1;
	else if((dS2 &lt;= z2.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z2.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 2 getroffen
		return -2;
	else if (dZ2&lt;= radiusZ2 &amp;&amp; (p.getZPos() &gt;= (z2.getZposZielscheibe() -1) &amp;&amp; p.getZPos() &lt;= z2.getZposZielscheibe())) // Pfeil hat Zielscheibe 2 getroffen
		return 2;
	else if((dS3 &lt;= z3.getRadiusStock()) &amp;&amp; ((p.getYPos() &lt;= z3.getYposZielscheibe()) &amp;&amp; (p.getYPos() &gt; 0))) // Pfeil hat Stock 3 getroffen
		return -3;
	else if (dZ3&lt;= radiusZ3 &amp;&amp; (p.getZPos() &gt;= (z3.getZposZielscheibe() -1) &amp;&amp; p.getZPos() &lt;= z3.getZposZielscheibe())) // Pfeil hat Zielscheibe 3 getroffen
		return 3;
	else
		return 0;

}
void koordinatenAbfrage (Pfeil&amp; p){

	GLfloat ergebnisAbfrage = koordinatenAbfrageMitZielscheibeStock(p); // Abstandsvergleich zur Zielscheibe und Stock von Zielscheibe 1;

	// std::cout &lt;&lt; &quot;Ergebnisabfrage &quot; &lt;&lt;ergebnisAbfrage &lt;&lt; &quot;\n&quot;;

	if(p.getYPos() &lt; 0 || ergebnisAbfrage != 0){

		// std:: cout &lt;&lt; &quot;Hallöle&quot;&lt;&lt; &quot;\n&quot;;

		imSpiel = GL_FALSE;
		zumSchiessen = GL_FALSE;

		p.setPfeilImFlug(GL_FALSE); // Pfeil hat etwas getroffen

		// // Nur für Methode Umfallen von Bedeutung!!!!!
		// if(ergebnisAbfrage == 1) // dh. hat Zielscheibe und nicht Stock getroffen
		// z1.setGetroffen(GL_TRUE);
		// if(ergebnisAbfrage == 2) // dh. hat Zielscheibe und nicht Stock getroffen
		// z2.setGetroffen(GL_TRUE);
		// if(ergebnisAbfrage == 3) // dh. hat Zielscheibe und nicht Stock getroffen
		// z3.setGetroffen(GL_TRUE);

	}
}
//

void pfeilFliegt(Pfeil&amp; p){
	koordinatenAbfrage(p);

	p.fliegt(links, hoch, getKraft()); // 3.Variable ist Anfangsgeschwinidigkeit

}

void zielscheibeUndPfeilZeichnen(Pfeil&amp; p , Zielscheibe z, GLfloat xZ, GLfloat yZ, GLfloat zZ){

	glPushMatrix(); // z1 Zielscheibe mit Stock zeichnen
	glTranslatef(xZ,yZ, zZ);
	z.stockZielscheibeZeichnen();
	glPopMatrix();

	glPushMatrix(); // Pfeil wird gezeichnet
	glTranslatef(p.getXPos(), p.getYPos(),p.getZPos()); // damit sichtbar wird
	p.zeichnePfeil();
	glPopMatrix();

}

//void umfallen(Pfeil p, Zielscheibe z, GLfloat xZ, GLfloat yZ, GLfloat zZ, GLfloat abstand, GLfloat rS){
//
// glPushMatrix();
// glTranslatef(0.0f, 0.0f, (zZ + abstand -2*rS));
// glRotatef(drehwinkel, 1.0f, 0.0f, 0.0f);
// glTranslatef(0.0f, z.getRadiusStock(), -zZ - abstand +2.0f*rS);
//
// zielscheibeUndPfeilZeichnen(p, z, xZ, yZ, zZ);
// glPopMatrix();
//
//
// if (drehwinkel&gt;-90) {
// drehwinkel = drehwinkel - 3.0f;
// }
//
//
//}

void aktionMitAktuellemPfeil (void){

	if(istAngelegt == GL_TRUE)
		pfeilAnlegen(pfeilAktuell);

	if(zumZielen == GL_TRUE){
		istAngelegt = GL_FALSE;
		zielen();
	}

	if (zumSchiessen == GL_TRUE)
		schiessen(pfeilAktuell);

}

void zielscheibenZeichnen (void){

	z1.setXposZielscheibe(0);
	z1.setZposZielscheibe(-20);
	glPushMatrix(); // z1 Zielscheibe mit Stock zeichnen
	glTranslatef(z1.getXposZielscheibe(), z1.getYposZielscheibe(), z1.getZposZielscheibe());
	z1.stockZielscheibeZeichnen();
	glPopMatrix();

	z2.setXposZielscheibe(8);
	z2.setZposZielscheibe(-30);
	glPushMatrix(); // z2 Zielscheibe mit Stock zeichnen
	glTranslatef(z2.getXposZielscheibe(), z2.getYposZielscheibe(), z2.getZposZielscheibe());
	z2.stockZielscheibeZeichnen();
	glPopMatrix();

	z3.setXposZielscheibe(-10);
	z3.setZposZielscheibe(-20);
	glPushMatrix(); // z2 Zielscheibe mit Stock zeichnen
	glTranslatef(z3.getXposZielscheibe(), z3.getYposZielscheibe(), z3.getZposZielscheibe());
	z3.stockZielscheibeZeichnen();
	glPopMatrix();

}

void pfeileZeichnen(void){

	// std::cout &lt;&lt; &quot;Hallo&quot; &lt;&lt; &quot;\n&quot;;

	//pfeile[0] = pfeilAktuell;

	for(int i = 0; i &lt; anzahlPfeile; i++){

		std::cout &lt;&lt; &quot;Pfeil &quot; &lt;&lt; i &lt;&lt;&quot; : &quot; &lt;&lt; &quot;Aktiv?? &quot;&lt;&lt; (pfeile[i].isPfeilAktiv() == GL_TRUE) &lt;&lt; &quot; Flug?? &quot; &lt;&lt; (pfeile[i].isPfeilImFlug() == GL_FALSE) &lt;&lt;&quot;\n&quot;;

		if(pfeile[i].isPfeilAktiv() == GL_TRUE &amp;&amp; pfeile[i].isPfeilImFlug() == GL_FALSE){

			std::cout &lt;&lt; &quot;Pfeil&quot; &lt;&lt; i &lt;&lt;&quot;: wird gezeichnet&quot; &lt;&lt; &quot;\n&quot;;
			pfeile[i].zeichnePfeilNachHatGetroffen();
		}
	}

}

void drawScene(void){

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	if (istUnterbrochen)
		Textausgabe::printSpielanleitung();

	else{

		glLoadIdentity();
		// gluLookAt(15, 5,zZ1, 0,5,zZ1, 0,1,0); // Kamerapositon verändern
		// gluLookAt(0, 6,zZ1+6, 0,6,zZ1, 0,1,0); // Kamerapositon verändern
		// gluLookAt(0, 10,0, 0,8, 0, 0,1,0); // Kamerapositon verändern
		gluLookAt(10,5,0, 0,5, -20, 0,1,0); // Kamerapositon verändern

		BodenUndHimmel::bodenUndHimmelZeichnen();
		zielscheibenZeichnen();
		pfeileZeichnen();

		aktionMitAktuellemPfeil();

		glutSwapBuffers();
		glutPostRedisplay();

	}

}

void initLightning(void)
{
	GLfloat lmodel_ambient [] = {0.5f, 0.5f, 0.5f, 1.0f}; // Hintergrundlicht

	GLfloat light0_positon [] = {5.0f, 2.0f, -3, 1.0f};
	GLfloat light0_diffuse [] = {0.4f, 0.4f, 0.4f, 1.0f};
	GLfloat light0_specular [] = {0.8f, 0.8f, 0.8f, 1.0f};
	GLfloat light0_direction [] = {-1.0f, 0.0f, -0.75f};

	GLfloat light1_positon [] = {0.0f, 3.0f, 0.0, 1.0f};
	GLfloat light1_diffuse [] = {0.8f, 0.8f, 0.8f, 1.0f};
	GLfloat light1_specular [] = {0.9f, 0.9f, 0.9f, 1.0f};
	GLfloat light1_direction [] = {0.0f, 0.0f, -1.0f};

	// Strahler:: definiert GL_Light0 (von der Seite)
	glLightfv(GL_LIGHT0, GL_POSITION, light0_positon);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
	glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);
	glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light0_direction);
	glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 100.0f); // Öffnungswinkel des Strahlers
	glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 30.0f);

	// Strahler:: definiert GL_Light1
	glLightfv(GL_LIGHT1, GL_POSITION, light1_positon);
	glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
	glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
	glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light1_direction);
	glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 5.0f); // Öffnungswinkel des Strahlers
	glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 100.0f);

	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); // Hintergrundlicht

	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glEnable(GL_LIGHT1);
}

void init(void)
{
	glClearColor(0.0, 0.0, 0.0, 0.0);

	glEnable(GL_DEPTH_TEST);

	z1 = Zielscheibe(abstandZ1, radiusZ1);
	z2 = Zielscheibe(abstandZ2, radiusZ2);
	z3 = Zielscheibe(abstandZ3, radiusZ3);

	pfeile[0]= Pfeil();
	pfeile[1]= Pfeil();
	pfeile[2]= Pfeil();
	pfeile[3]= Pfeil();
	pfeile[4]= Pfeil();
	pfeile[5]= Pfeil();
	b1 = Bogen();

	glutKeyboardFunc(keyboard);
	glutSpecialFunc(special);

	initLightning();

}

void reshape(int w, int h)
{
	glViewport( 0, 0, w, h );
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	if(istUnterbrochen)
		glOrtho(-10, 10, -10, 10, -10, 10);
	else
		gluPerspective(90, 1, 1, 500);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

int main(int argc, char **argv)
{
	glutInit(&amp;argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(750, 750);
	glutInitWindowPosition(100, 100);
	glutCreateWindow(&quot;Bogenschießen&quot;);
	init();
	glutReshapeFunc(reshape);
	glutDisplayFunc(drawScene);
	glutMainLoop();
	return(0);
}
</code></pre>
<p>2 wichtige sachen:</p>
<p>0.- code tags für quellcode !<br />
1.- beschreib genauer was dein problem ist.<br />
2.- poste nur den relevanten auf ein kompilierbares minimal beispiel reduzierten code !!!</p>
<p>das liest sich keiner durch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274551</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 25 Nov 2012 16:54:06 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen on Mon, 26 Nov 2012 09:04:45 GMT]]></title><description><![CDATA[<p>Wenn ich mir das anschaue sieht Dein Problem ja ungefähr so aus:</p>
<pre><code class="language-cpp">Pfeil pfeilAktuell;
const int anzahlPfeile = 6;
Pfeil pfeile[anzahlPfeile];

Pfeil pfeilWaehlen(void){
    for (int i = 0; i&lt; anzahlPfeile; i++){
        if(pfeile[i].isPfeilAktiv() == GL_FALSE){
            // pfeile[i].setPfeilAktiv(GL_TRUE);
            return pfeile[i];
        }
        // // es gibt keine Pfeile mehr -&gt;Game over
    }
}

void keyboard ( unsigned char key, int  x, int y)
{
  /* codecodecode */
  pfeilAktuell = pfeilWaehlen();
  /* codecodecode */
}
</code></pre>
<p>Und die Frage ist, warum <code>pfeilAktuell</code> und <code>pfeile[i]</code> nicht dasselbe Objekt sind. Und was man daran ändern kann.</p>
<p>Der Code ist leider komplett fubar... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Trotzdem:<br />
Wie wäre es, wenn Du statt <code>Pfeil pfeilAktuell</code> einfach ein <code>int pfeil_aktuell_index</code> nimmst, der in Dein Array zeigt?<br />
Das wäre eine pragmatische Lösung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274702</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 26 Nov 2012 09:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen on Mon, 26 Nov 2012 09:08:19 GMT]]></title><description><![CDATA[<p>für mich sieht das auch eher so aus, als hätte er mal ein bisschen in ein C/C++ buch geschaut, dann ein OpenGL tutorial in seinen editor kopiert und schraubt da jetzt ein bisschen rum</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274704</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 26 Nov 2012 09:08:19 GMT</pubDate></item></channel></rss>