Problem mit Schussfunktion, sogar selbst was überlegt!
Übersicht

AFROBetreff: Problem mit Schussfunktion, sogar selbst was überlegt! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, ich weiß zu dem Thema gibt es ganz schön viele Threads, aber trotz den vielen die ich durchgelesen habe, komme ich nicht mehr weiter ![]() Also, ich hab jetzt eine Schussfunction wie sie eigentlich functionieren müsste geproggt, aber jetzt malt es meinen Schuss nur so lange, wie ich die Leertaste gedrückt halte! Sieht so aus: Code: ;Graphics... Global player = LoadImage ("player.bmp") Global kugel = LoadImage ("Kugel.bmp") Global player_x = 100 Global player_y = 100 ;.... Repeat Cls Draw_Player Draw_Kugel Flip Until KeyHit (1) End Function Draw_Player () DrawImage Player, player_x, player_y End Function Function Draw_Kugel () If KeyHit (space) Then Kugel_X = Player_X Kugel_Y = Player_Y DrawImage Kugel, Kugel_X, Kugel_Y Kugel_X = Kugel_X +4 End Function Kann mir bitte jemand helfen, probiere schon seit wochen selbst damit klar zu kommen, habe dutzende Tutorials durchgelesen, sowie die Threads in dem Forum und hab die Suchfunktion benutzt! Benutze übrigens Blitz Basic 2D!!! ~Editiert~ Wenn du [ code ] Tags verwendest, solltest du BBCode nicht deaktivieren. MfG D2006 |
||
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
einer der alten fehler : DrawImage wird nur aufgerufen wenn du die Funktion
Draw_Kugel() aufrufst. Mach noch eine UpDate_Kugel Funktion, und du brauxhst Types. |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
MatthiasBetreff: SIN\COS Ist der schlüssel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Afro Habe deinen Beitrag gelesen und dir in 10min was zusammen geschustert Vieleicht kannst du damit was Anfangen.
Gruß Matthias BlitzBasic: Graphics 800,600,32,2 |
||
![]() |
Smokie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ma ne Frage kennst du dich mit Types aus?? Die sind für Schüsse ideal:
Code: Graphics 640,480,16,3 SetBuffer BackBuffer() Type Schuss Field x,y End Type Repeat Cls Oval MouseX(),MouseY(),10,10,0 If MouseHit(1) Then s.schuss = New schuss s\x = MouseX() s\y = MouseY() EndIf For s.schuss= Each schuss Oval s\x,s\y,5,5,1 s\y=s\y - 3 If s\y < 1 Then Delete s Next Flip Until KeyHit(1) End Wenn du dich mit Types einigermaßen auskennst soltle das kein Problem für dich sein. Ansonsten kannst du ja nochma fragen grüße |
||
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer. Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Smokie hat Folgendes geschrieben: Ma ne Frage Mathias hat Folgendes geschrieben: und dir in 10min was zusammen geschustert ![]() ----- Das war sein Problem: AFRO hat Folgendes geschrieben: aber jetzt malt es meinen Schuss nur so lange, wie ich die Leertaste gedrückt halte! Der Fehler liegt hier: Code: If KeyHit (space) Then Kugel_X = Player_X Kugel_Y = Player_Y DrawImage Kugel, Kugel_X, Kugel_Y Kugel_X = Kugel_X +4 EndIf DrawImage ist innerhalb der Bedingung KeyHit(space), wird also nur ausgeführt, wenn du Space drückst. Nimm den Zeichenbefehl aus der Bedingung und lass ihn nach der If KeyHit()-Bedingung ausführen. Bei Tastendruck soll lediglich ein neuer Schuss erstellt werden. Smokie hatte dir ja einen Beispielcode gegeben. Types sind dafür ideal (und sag jetzt nicht: "Die sind zu kompliziert" ![]() |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
AFRO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thx, das is alles schon ganz gut, nur bei Matthias blick ich noch nicht so ganz durch... is ja egal! die anderen Beispiele sind top!
@ Garret: Types sind mir zu kompliziert Scherz! langsam komm ich sogar schon mit denen klar, wollte ihnen aber noch ein wenig ausweichen! Ich schau mir jetz mal die Beispiele genauer an und die Posts und dann berichte ich noch mal! ![]() |
||
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi,
also ich bin noch ein totaler noob und verstehe noch nicht viel vin types. Smokie: Ich verstehe diesen teil des codes noch nicht ganz: Zitat: If MouseHit(1) Then
s.schuss = New schuss s\x = MouseX() s\y = MouseY() EndIf For s.schuss= Each schuss Oval s\x,s\y,5,5,1 s\y=s\y - 3 If s\y < 1 Then Delete s Next Also, Ich weis natürlich, das mit einem druck auf die Maustaste, "s.schus" zu dem feld "schuss" zugewiesen wird. Aber s/x und s/y verstehe ich nicht. Was bewirkt dies? Ich dachte ja zuerst das diese Variablen aussehen können wie man will. Doch als ich ueberall s/x durch s_x getauscht hatte veränderte sich das programm. wsas bewirkt das "geteilt"-zeichen? Ich wäre dir auch dankbar wenn du die zwei zeilen über "If s\y < 1 Then Delete s" noch einmal. |
||
![]() |
Smokie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay.
ein Type ist eine Sammlung von Variablen unter einem Sammel Begriff. Das ist zwar net ganz richtig aber man kann sich so mehr drunter vorstellen. Im Beispiel wird das so deklariert: Code: type schuss ;Schuss ist der Sammelbegriff field x field y ; Das sind die Variablen die unter diesem Begriff gespeichert werden end type UNd so kann man ganz oft den gleichen Haufen von Variablen anllegen s.schuss = new schuss ; s ist sozusagen der Name für den schuss und new schuss bedeutete ganz einfach, dass ein neuer Schuss angelegt wird. das Zeichen"\ "ist kein kein geteilt Zeichen "/" sondern und es bedeutet, dass von dem Schuss s auf die Variable die dahinter steht zugegriffen werden soll. Code: s\x = 400
for s.schuss = each schuss ;Diese schleife durchläuft jeden Schuss s ist selbe wie oben, aber man kann auch n nehmen. Es muss nicht das gleiche sein wie oben und es hat auch nix mit dem Typenamen zu tun. So kann man jeden schuss durchlaufen. Edit.: delete s bedeutet nur, dass der schuss s gelöscht wird ______ Das ist jetzt net alles richtig, aber man soll es ja verstehen. Types sind wie dimfelder nur, sind Type langsamer aber sie sind dynamisch, d.h. wenn mehr Platz benötigt wird erweitert sich der type. Ich hoffe du hast es jetzt verstanden. Grüße[/b] |
||
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer. Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet |
![]() |
Pingu_Killer |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen dank
hat mir sehr geholfen ![]() EDIT: Es hat dann doch nicht geklappt. Es gab ein weiteres problem mit den "If" bedingungen in "MoveEnemy()" und "DrawEnemy". Habe sie erst einmal rausgenommen. Klappt jetzt. ![]() |
||
AFRO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, types kann ich scho machen, hab auch das tutorial gelesen, in dem es mit personen und so erklärt wird...
BSP: Type Ich Field Alter Field Größe Field Gewicht Field Länge ![]() End Type Aber trotz den tollen threads und bsps die hier schon abgegeben wurden kapier ich das ganz noch nicht so ganz. Hab auch schon wieder viel ausprobiert, kommt aber immer noch nichts raus! ![]() @ Garret Ich glaub mit dir bin ich auf dem richtigen weg, weiß aber nicht wie das gemeint ist das DrawImage aus der if-bedingung nehmen? hab ich schon ausprobiert, dass ichs nach dem Endif setze, da kommt aber dann gleich ganix mehr raus!!! bin so verzweifelt....... |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Ablaufschema für den Einsatz von Types in deinem Spiel sieht grob so aus:
Code: Kugel_Bild = LoadImage("kugel.png") Type kugel Field x,y End Type Damit wird ein Bild (Kugel_Bild) für deine Schüsse geladen. Außerdem wird jetzt eine Schablone für Schüsse erstellt. Man kann sich Types gut als Sandkastenform vorstellen. Du hast momentan nur eine leere Schablone, kannst damit aber beliebig viele Abzüge, in diesem Falle Sandhäufchen erstellen, die alle gleich aussehen. Mit Code: k.kugel = New kugel erstellst du einen neuen Sandhaufen, der die Eigenschaften x und y hat. Die Zeilen Code: k\x = 10 k\y = 20 weisen deiner neuen Kugel / Sandhaufen bzw. ihren Eigenschaften Werte zu. Die x- und die y-Koordinate deiner neu erstellten Kugel sind also 10 und 20. --- Wie jetzt aber die Kugeln bewegen und zeichnen? Zunächst wird auf Druck der Leertaste (Scancode 57) ein neuer Schuss (k.kugel) erstellt: Code: If KeyHit(57) k.kugel = New kugel k\x = 10 k\y = PlayerY EndIf k\y = PlayerY bewirkt, dass die Kugel die gleiche Y-Koordinate wie der Spieler erhält. Ich gehe hierbei davon aus, dass es sich um einen Spaceshooter handelt, bei dem man von links nach rechts fliegt. In jedem Durchlauf der Spiel-Hauptschleife (meist die Repeat-Until KeyHit(1)- oder While Not KeyHit(1)-Wend-Schleife) soll jetzt noch die Position der Schüsse verändert werden: Code: For k.kugel = Each kugel k\x = k\x +1 DrawImage Kugel_Bild, k\x, k\y Next Außerdem wird für jede Kugel das Kugel_Bild gezeichnet. Code: For k.kugel = Each kugel arbeitet folgendermaßen: Da alle neu erstellten Schüsse (also die Sandhaufen) untereinander gleich sind, muss man eine Beispielvariable angeben, die zeigt, wie mit allen anderen Sandhaufen verfahren werden soll, hier also k.kugel. Für g.kugel oder h.kugel wird das gleiche gemacht wie für k.kugel, ihre x-Variable wird um eins erhöht (k\x = k\x +1). Next schließt die For-Schleife ab. --- Wird ein Sandhaufen nun nicht mehr benötigt, kann er problemlos wieder gelöscht werden. Ich gehe hier wie gesagt von einem Spaceshooter aus. Das bedeutet: Verlässt die Kugel den Bildschirm (oder trifft sie einen Gegner), wird sie gelöscht. Dazu erweitern wir die obere For-Schleife: Code: For k.kugel = Each kugel k\x = k\x +1 DrawImage Kugel_Bild, k\x, k\y If k\x>640 Delete k.kugel Next Es ist wichtig, den Delete-Befehl immer ans Ende einer For-Each-Schleife zu setzen, da sonst eventuell eine Abfrage auf einen nicht mehr vorhandenen Sandhaufen entstehen könnte, was zu einer Fehlermeldung ("Object doesnt exist") führt. --- Der gesamte Code sieht also grob so aus: Code: Graphics 640,480 : SetBuffer Backbuffer() Kugel_Bild = LoadImage("kugel.png") Type kugel Field x,y End Type PlayerY = 100 Repeat:Cls If KeyHit(57) k.kugel = New kugel k\x = 10 k\y = PlayerY EndIf For k.kugel = Each kugel k\x = k\x +1 DrawImage Kugel_Bild, k\x, k\y If k\x>640 Delete k.kugel Next Flip:Until KeyHit(1):End Der Code benötigt allerdings noch eine Bremse, sprich einen Timer. MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Das artet ja noch in ein Tutorial aus ![]() Types sind ein komplexes Thema, aber da gibt es doch schon gute Tutorials hier im Forum einfach mal die eingestaubte *pust* "Suchfunktion" verwenden ![]() |
||
AFRO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alter THX garret! Glaub jetz hab ichs kapiert, muss aber jetz erst mal eine woche ohne meiner dicken Berta (so nenn ich meinen pc liebevoll ![]() ![]() |
||
AFROBetreff: THX |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sry dass ich so lange nicht gepostet hab, aber ich war ja im urlaub! ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group