Problem bei der Kollisionsabfrage - gelöst-danke

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Nemic

Betreff: Problem bei der Kollisionsabfrage - gelöst-danke

BeitragMo, Jul 24, 2006 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Zusammen, ich hoffe ich habe den Beitrag in den richtigen Teil des Forumsgeschrieben. Hoffe auf Hilfe von euch, da ich nicht weiterkomme. Ich habe schon viele Tutorials durchgearbeitet. Darunter auch diesen SpaceShooter? Ich diesesn Code etwas modifiziert. Ziel ist es ein "BallonShooter" zu kreieren. Man hat eine Fadenkreuz, und muss Ballöne abschiessen. Also so eine Art Moorhuhn Wink Ich habe schon etwas Code. Das Problem ist, das ich nur einen Ballon auf dem Bildschirm habe. Und ich möchte die Funktion, und was alles dazugehört nicht einfach kopieren. Immer wenn ich die Leertatste betätige sollte ein neuer dazu kommen. Könnt ihr mir bitte helfen. Hier ist noch der Code, für die, die ganz viel Zeit haben. Bin super dankbar, für jede Hilfe! Das Prob ist, immer wenn ich die Leertaste drücke, kommt der Ballon einfach wieder von unten...es sollte aber ein neuer entstehen....


__________________________________________________
Global GameObjectList:TList=CreateList()
Graphics 800,600,1
HideMouse()

Local URL:String=""
Local Player:TCursor=TCursor.Create(URL+"Cursor.bmp",MouseX(),MouseY())
SetMaskColor 0,0,0
Global Background=LoadImage ("background.bmp")


'________Haupt-Schleife______________
Repeat
Cls
For o:TGameObject=EachIn GameObjectList
DrawImage (Background,0,0)
o.UpdateState
o.DrawSelf()
Player.DrawSelf()


Next
Flip
Until KeyDown(Key_Escape)Or AppTerminate()
End

'___Types, Attributs und Behaviours___

Type TGameObject

Field x:Int
Field y:Int
Field speed:Int=3
Field image:TImage

Method DrawSelf()
DrawImage Image,x,y
EndMethod

Method UpdateState() Abstract

End Type






Type TEnemy Extends TGameObject

Field Frame:Int=0
Field AnimDelay:Int=10



Function Create:TEnemy(File:String,xstart:Int,ystart:Int)
Local Cur:TEnemy=New TEnemy
Cur.X=xstart
Cur.Y=ystart
SetMaskColor 6,205,255
Cur.Image=LoadAnimImage(File,40,80,0,4)

If Cur.Image=Null
Print "Das Bild konnte nicht geladen werden!Programm abgebrochen!"
End
EndIf

ListAddLast GameObjectList,Cur
Return Cur
End Function

Method Drawself()
DrawImage Image,x,y,frame
EndMethod

Method updatestate()
Y:-speed
CheckCollision()
If AnimDelay<0 Then
Frame :+ 1
If Frame>3 Then Frame=0
AnimDelay=10
EndIf
AnimDelay :- 1
If y<-80
ListRemove(GameObjectList,Self)
EndIf
EndMethod


Method CheckCollision()
EndMethod




EndType





Type TCursor Extends TGameObject

Field ShootDelay:Int
Field CreateDelay:Int

Function Create:TCursor(File:String,xstart:Int,ystart:Int)
Local Cur:TCursor=New TCursor
Cur.x=xstart
Cur.y=Ystart
Cur.image=LoadImage(File)

If Cur.Image=Null
Print "Das Bild konnte nicht geladen werden!Programm abgebrochen!"
End
EndIf

ListAddLast GameObjectList, Cur
Return Cur
End Function

Method UpdateState()
x=MouseX()
y=MouseY()
CreateDelay:-1
If KeyDown(Key_Space)
BallonCreate()
EndIf


If x>740 Then x=740
If y>540 Then y=540

End Method


Method BallonCreate()
bx=Rnd (0,760)
Local FileName:String="ballonani.bmp"
Local Enemy:TEnemy=TEnemy.Create(FileName,bx,600)
CreateDelay=100
End Method



Method Drawself()
DrawImage Image,x,y
EndMethod



End Type
  • Zuletzt bearbeitet von Nemic am Mo, Jul 24, 2006 19:36, insgesamt 2-mal bearbeitet
 

Dreamora

BeitragMo, Jul 24, 2006 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich empfehle die Tutorials im englischen Board mal zu machen.
Es hat einige Dinge im Code die so eigentlich nicht mehr sein können / dürfen, wenn du wirklich schon einige tutorials gemacht hast. (zb Create das einen Filenamen nimmt und immer wieder das Bild lädt was ziemlich zeit in anspruch nimmt anstatt 1 Mal das Bild zu laden und es immer wieder zu verwenden bzw. dem Create ein TImage übergeben).

Auch sehe ich da irgendwie nicht wie und wo etwas hinzugefügt wird.

generell ist es so, dass beim drücken der Leertaste einfach ein neuer Ballon erzeugt würde an einer Position, der der Objektliste hinzugefügt wird.
Danach wird er wie alle anderen Objekte geupdatet, den Teil hast du jetzt ja schon drin.

Das einzige was also fehlt ist das beim drücken der Leertaste an einer beliebigen Position der Ballon erzeugt wird, wofür ja die Funktionalität eigentlich schon vorhanden ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

d-bug

BeitragMo, Jul 24, 2006 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich korrigierte es zwar schon im Archiv, aber was solls...

Code: [AUSKLAPPEN]

'________Haupt-Schleife______________
Repeat
   Cls
   DrawImage (Background,0,0) '--------------------------- richtig

   For o:TGameObject=EachIn GameObjectList
      'DrawImage (Background,0,0) '------------------------ falsch
      o.UpdateState
      o.DrawSelf()
      Player.DrawSelf()
   Next
   Flip
Until KeyDown(Key_Escape)Or AppTerminate()
End


Code: [AUSKLAPPEN]
'Image hier laden, und nicht in der Schleife!!!
global Ballon:TImage = LoadAnimImage("DeinBallonImage",40,80,0,4)

Type TEnemy Extends TGameObject

   Function Create:TEnemy(xstart:Int,ystart:Int)
      Local Cur:TEnemy=New TEnemy
      Cur.X=xstart
      Cur.Y=ystart
      SetMaskColor 6,205,255
      Cur.Image=Ballon '---------------------- Image zuweisen

      ....
   End Function


Code: [AUSKLAPPEN]
Type TCursor Extends TGameObject

   ...

   Method UpdateState()
      x=MouseX()
      y=MouseY()
      CreateDelay:-1
      'If KeyDown(Key_Space) '---------------------------falsch
      If KeyHit(KEY_SPACE) '-------------------------------richtig
        BallonCreate()
      EndIf
      If x>740 Then x=740
      If y>540 Then y=540

   End Method

      ...

   Method BallonCreate()
      bx=Rnd (0,760)
      Local Enemy:TEnemy=TEnemy.Create(bx,600)
      CreateDelay=100
    End Method


so...

cheers
 

Nemic

BeitragMo, Jul 24, 2006 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank ersteinmal, der Script wurde jetzt schon ein paar Mal korrigiert. Vielen Dank d-bug Wink. Alles läuft soweit genau so, wie ich es will. Doch nun habe ich ein anderes Problem, nämlich die Kollisionsabfrage. Hier ist der Link zum (korrigierten) Code:
https://www.blitzforum.de/upload/code.php?show=117
Irgendwo scheint ein Problem zu sein, doch ich finde es nicht heraus. Wäre nett, wenn ihr mir noch einmal helfen könntet.

Mit freundlichen Grüssen
Nemic

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group