hi
ich ihab mit BB einen shooter programmiert und bin fast fertig.(die raumschiff fliegen immer von links nach rechts und man muss sie treffen)
aber ich möchte machen das nach z.b 10 sekunden andere raumschiffe über den bildschirm fliegen die kleiner und schwerer zu treffen sind. ich hab versucht sie drüberzuzeichnen, aber weil sie kleiner sind sieht man das vorherige raumschiff noch. frage: wie kann ich das alte raumschiff weg machen? mit "freeimage" gehts ned weil es das bild dan aus dem speicher schmeisst, und dan bekomm ich probleme mit dem if imagesoverlap befehl, weil das bild ja nicht mehr im speicher is (image does not exist).
ich ihab mit BB einen shooter programmiert und bin fast fertig.(die raumschiff fliegen immer von links nach rechts und man muss sie treffen)
aber ich möchte machen das nach z.b 10 sekunden andere raumschiffe über den bildschirm fliegen die kleiner und schwerer zu treffen sind. ich hab versucht sie drüberzuzeichnen, aber weil sie kleiner sind sieht man das vorherige raumschiff noch. frage: wie kann ich das alte raumschiff weg machen? mit "freeimage" gehts ned weil es das bild dan aus dem speicher schmeisst, und dan bekomm ich probleme mit dem if imagesoverlap befehl, weil das bild ja nicht mehr im speicher is (image does not exist).
Du mußt Dich unbedingt mit dem Prinzip der Doppelpufferung vertraut machen.
Man zeichnet bei einem Spiel das gesamte Bild ständig komplett neu - 30 bis 100 Mal je Sekunde. Damit entsteht die Frage nicht, wie man etwas wegmacht - man zeichnet es beim nächsten Schleifendurchlauf einfach nicht mehr.
Man zeichnet bei einem Spiel das gesamte Bild ständig komplett neu - 30 bis 100 Mal je Sekunde. Damit entsteht die Frage nicht, wie man etwas wegmacht - man zeichnet es beim nächsten Schleifendurchlauf einfach nicht mehr.
kein plan wie das gehen soll %-) for schleifen sind für mich schon immer kompliziert.
so weit bin ich antscheinend noch ned.
aber trotzdem thhnx für deine antwort René ;-)
so weit bin ich antscheinend noch ned.
aber trotzdem thhnx für deine antwort René ;-)
Dann lies mein Buch. :)
Du mußt Schleifen perfekt beherrschen.
So bewegst Du ein Bild über den Bildschirm:
Graphics 640, 480
SetBuffer BackBuffer()
bild = LoadImage("cow.bmp")
For I=0 To 10
Cls
DrawImage bild, I*50, 200
Flip
Delay 300
Next
WaitKey
Du mußt Schleifen perfekt beherrschen.
So bewegst Du ein Bild über den Bildschirm:
Graphics 640, 480
SetBuffer BackBuffer()
bild = LoadImage("cow.bmp")
For I=0 To 10
Cls
DrawImage bild, I*50, 200
Flip
Delay 300
Next
WaitKey
so ich hab den code jetzt ausprobiert, ein bischen verändert u.s.w ....und ich kappier es langsam ;)
aber jetzt hätt ich ncoh ne frage: wie lasse ich das bild von unten nach oben laufen(schüsse)? oder soll cih die schüsse weiterhin mit Y = Y - 2 machen? das problem mit Y = Y - 2 ist das ich nur 1 mal schiessen kann, ausser wenn ich mit goto wieder fast an den anfang des programms gehe
aber jetzt hätt ich ncoh ne frage: wie lasse ich das bild von unten nach oben laufen(schüsse)? oder soll cih die schüsse weiterhin mit Y = Y - 2 machen? das problem mit Y = Y - 2 ist das ich nur 1 mal schiessen kann, ausser wenn ich mit goto wieder fast an den anfang des programms gehe
oh man is das verwirrend %-|
ich möchte das das alien wenn es den rechten bildschirmrand verlässt links wieder auftaucht, no problem: if I = 10 then I = 0
aber dan beschäftigt sich das programm unendlich mit der for schleife, und kommt nie zu dem teil wo sich die figur bewegen sollte :-|
ich möchte das das alien wenn es den rechten bildschirmrand verlässt links wieder auftaucht, no problem: if I = 10 then I = 0
aber dan beschäftigt sich das programm unendlich mit der for schleife, und kommt nie zu dem teil wo sich die figur bewegen sollte :-|
Ich glaube, Du machst den Fehler, vor dem ich im Buch gewarnt habe. :-)
Man programmiert nicht, indem man andere Quelltexte nimmt und verändert. Und Du hast offensichtlich bereits bei den Spielegerüsten gestöbert, ohne ausreichend BB zu verstehen. Du mußt wirklich erst programmieren lernen, mit kleinen Übungen. Lies das Buch und arbeite alles nach - am besten, ohne die Quelltexte zu laden. Stelle Dir einfache Aufgaben und löse sie.
Man programmiert nicht, indem man andere Quelltexte nimmt und verändert. Und Du hast offensichtlich bereits bei den Spielegerüsten gestöbert, ohne ausreichend BB zu verstehen. Du mußt wirklich erst programmieren lernen, mit kleinen Übungen. Lies das Buch und arbeite alles nach - am besten, ohne die Quelltexte zu laden. Stelle Dir einfache Aufgaben und löse sie.
ach ja!
@ René: ist dein buch "jetzt lerne ich spiele programmieren" sozusagen der 2. teil von "hack'n play: spiele programmieren"?? wenn ja, dann werde ich mir das buch wahrscheinlich kaufen.
@ René: ist dein buch "jetzt lerne ich spiele programmieren" sozusagen der 2. teil von "hack'n play: spiele programmieren"?? wenn ja, dann werde ich mir das buch wahrscheinlich kaufen.
Ja, ein stark erweiterter Nachfolger. Alle Inhalte des ersten sind auch im zweiten Buch.
nochmal zum Thema... wie lasse ich ein Bild verschwinden.
Ich hab eine Colisionsabfrage...... bei einem Imagezusammenstoß sollen beide Bilder verschwinden und gegebenfalls eine explosion erscheinen aber wie?
Ich hab eine Colisionsabfrage...... bei einem Imagezusammenstoß sollen beide Bilder verschwinden und gegebenfalls eine explosion erscheinen aber wie?
Lest noch mal oben - 1. Doppelpufferung, 2. mit den Grundlagen des Programmierens vertraut machen.
Es macht keinen Sinn, sich hinzusetzen und ein Spiel programmieren zu wollen. Man muß erst mit kleineren Programmen Erfahrungen sammeln.
(Im neuen Buch wird übrigens auf Kollisonen und Explosionen detailliert eingegangen.)
Es macht keinen Sinn, sich hinzusetzen und ein Spiel programmieren zu wollen. Man muß erst mit kleineren Programmen Erfahrungen sammeln.
(Im neuen Buch wird übrigens auf Kollisonen und Explosionen detailliert eingegangen.)
Naja ich lese es nochmal aber ich hab schon mein erstes *kleines* Spiel fertig und nun kommt das nächste.
Wieder mit 1000 Problemen.
Hat man ein gelöst kommen 5 andere :-(
Wieder mit 1000 Problemen.
Hat man ein gelöst kommen 5 andere :-(
Ich hab die Doppelpufferung nochmal gelesen - das ist mir auch klar aber erklärt nicht wie ich ein erzeugtes bild wieder weck bekomme!
Du bekommst es wieder weg, indem .... Du es nicht mehr zeichnest. :)
Siehe oben:
"Man zeichnet bei einem Spiel das gesamte Bild ständig komplett neu - 30 bis 100 Mal je Sekunde. Damit entsteht die Frage nicht, wie man etwas wegmacht - man zeichnet es beim nächsten Schleifendurchlauf einfach nicht mehr."
Siehe oben:
"Man zeichnet bei einem Spiel das gesamte Bild ständig komplett neu - 30 bis 100 Mal je Sekunde. Damit entsteht die Frage nicht, wie man etwas wegmacht - man zeichnet es beim nächsten Schleifendurchlauf einfach nicht mehr."
?????
. .
|
---
ich versuche es noch mal. - DANKE
. .
|
---
ich versuche es noch mal. - DANKE
ok ok das mit dem schleifen-zeichnen hab ich jetzt drauf! frage: "Damit entsteht die Frage nicht, wie man etwas wegmacht - man zeichnet es beim nächsten Schleifendurchlauf einfach nicht mehr." und wie zeichne ich es beim nächsten schleifen durchlauf nicht mehr??? hab null plan...
Nach meiner Auffassung wird bei jeder dieser "Schleifen" alles neu gezeichnet. Das ganze Spiel ist also eine Schleife, in der wiederum einzelne Schleifen (z.B. Abschuss bis zum Treffer) ausgeführt werden.
"und wie zeichne ich es beim nächsten schleifen durchlauf nicht mehr?"
Na, indem Du es nicht mehr zeichnest. :-) Ich habe hier ein kleines Beispiel für eine Spielschleife für Dich. Taste [E] schaltet ein Quadrat ein, [A] schaltet es wieder aus. Anhand von If-Abfragen wird entschieden, ob und was gezeichnet wird.
Graphics 640,480
SetBuffer BackBuffer()
Repeat
Cls
If KeyDown(18) Then Zeichnen=1 ; [E]
If KeyDown(30) Then Zeichnen=0 ; [A]
If Zeichnen=1 Then Rect 100,100,100,100
Flip
Until KeyHit(1)
Na, indem Du es nicht mehr zeichnest. :-) Ich habe hier ein kleines Beispiel für eine Spielschleife für Dich. Taste [E] schaltet ein Quadrat ein, [A] schaltet es wieder aus. Anhand von If-Abfragen wird entschieden, ob und was gezeichnet wird.
Graphics 640,480
SetBuffer BackBuffer()
Repeat
Cls
If KeyDown(18) Then Zeichnen=1 ; [E]
If KeyDown(30) Then Zeichnen=0 ; [A]
If Zeichnen=1 Then Rect 100,100,100,100
Flip
Until KeyHit(1)
toll!!! funtioniert! ;)
frage: ich habe am ende meines strahles ein paar funken als image gemacht die sich mit dem meteoriten überlappen sollen und energie baziehen soll, die funken werden (logischerweise) gleichzeitig mit dem strahl gezeichnet, also mit mousedown(1).
problem: es zieht dem meteor auch energie ab wenn ich den cursor drüberhalte aber keinen strahl abfeuere!
frage: ich habe am ende meines strahles ein paar funken als image gemacht die sich mit dem meteoriten überlappen sollen und energie baziehen soll, die funken werden (logischerweise) gleichzeitig mit dem strahl gezeichnet, also mit mousedown(1).
problem: es zieht dem meteor auch energie ab wenn ich den cursor drüberhalte aber keinen strahl abfeuere!
Seit wann gibt es in einem Weltraum-Shooter einen Mauscursor? :)
ich sagte ja ich will das spiel ähnlich "ufo attack" machen, also nicht kein gewöhnlicher space shooter.(gehört ofa attack eigentlich noch zu den space shootern?)
wie kann ich nun machen das es dem meteor nur energie abzieht wenn die funken gezeichnet sind.
wie kann ich nun machen das es dem meteor nur energie abzieht wenn die funken gezeichnet sind.
Da komme ich jetzt ins Grübeln. Du programmierst locker eine Abschussroutine mit Mauscursor-Steuerung, aber scheiterst an einer simplen Kollisionsabfrage?
Mir scheint, Dir fehlen in Wirklichkeit die Grundlagen und Du versuchst lediglich eines der Spielelistings auf der Beilage-CD zu modifizieren. Deine "Funken" sind ein Bild und der "Meteor" ein anderes. Du mußt also nur mit "ImagesColide" nachprüfen, ob sie zusammenstoßen. Ist das der Fall, wird Energie abgezogen...
hmmm nö nö, ich glaub ich ibn schon reif so ein spiel zu proggen. ich hab nähmlich mal stark nachgedacht, und was ist herausgekommen? ein if mousedown(1) = 1 then if imagesoverla(.... davorzusetzen!!! und siehe da: es geht! at rene: was is den so schwer an der maussteuerung? is doch eh voll einfach: X = mouseX()
Y = MouseY(). wenn ihr denkt ich mache das racketen abgeschossen werden dan liegt ihr falsch, das is mir dan doch ein BISSCHEN zu schwer!
ich glaub das game rockt trotzdem (es gibt immerhin 3 verschiedene laser ;)
Y = MouseY(). wenn ihr denkt ich mache das racketen abgeschossen werden dan liegt ihr falsch, das is mir dan doch ein BISSCHEN zu schwer!
ich glaub das game rockt trotzdem (es gibt immerhin 3 verschiedene laser ;)
Ich bin noch blutiger Anfänger aber den Befehl "imagesoverlay" gibt es, soweit ich weiß, nicht. :)
" if imagesoverla(.... "
Wieso, Du behauptest doch, dass es geht. *ertappt*
Wieso, Du behauptest doch, dass es geht. *ertappt*
für die Kollision git es glaub ich nur 2 befehle: imagesoverlap und imagescollide
kleinere grafiken bekomm ich ja noch hin, aber wenn ich einen hintergrund mit paint zeichne sieht das Sch
... aus :)
... aus :)
mit Photoshop geht es ganz schnell und leicht sieht auch noch nach was gleich mit ein paar filter und fertig. :-)
Logge dich ein um einen Beitrag zu schreiben.