gegner als type...
Übersicht

![]() |
SponsorBetreff: gegner als type... |
![]() Antworten mit Zitat ![]() |
---|---|---|
moinsen, der titel triffts nicht ganz aber ich hab folgendes problem:
ich hab mir ein kleines game gebastelt, indem ich schießen kann, auch auf gegner die ich vorerst als würfel erstellt hab. die schüsse werden auch fein gelöscht wenn sie mit den gegner kollidieren, aber: ![]() ![]() Code: [AUSKLAPPEN] Graphics3D 1024,768,16,1
t#=CreateTimer(60) Type g Field e Field x# Field y# Field z# Field leben% Field sx# Field sy# Field sz# Field tex Field ty End Type Type k Field e Field x# Field y# Field z# Field sx# Field sy# Field sz# Field tex Field ty Field move# Field dista# Field zaehler% End Type Global timer=CreateTimer(60) SetBuffer BackBuffer() licht=CreateLight(3) PositionEntity licht,50,200,50 welt=CreateTerrain(256) welt_tex=LoadTexture("pic\gras.png") EntityTexture welt,welt_tex ScaleTexture welt_tex,2,2 ;box=CreateCube() ;PositionEntity box,10,1,20 ;EntityType box,3 box_tex=LoadTexture("pic\metall.jpg") ;box_tex_hit=LoadTexture("pic\metall hit.jpg") ;box_tex_hit2=LoadTexture("pic\metall hit2.jpg") ;box_tex_hit3=LoadTexture("pic\metall hit3.jpg") ;box_tex_hit4=LoadTexture("pic\metall hit4.jpg") ;EntityTexture box,box_tex boom=LoadSprite("pic\explode.bmp") ScaleSprite boom,5,5 PositionEntity boom,10,1,20 HideEntity boom shot=LoadSound("sound\shot2.wav") hit=LoadSound("sound\hit.wav") explode=LoadSound("sound\explode.wav") Global f_k = CreatePivot() PositionEntity f_k,0,2,5 Global cam=CreateCamera(f_k) CameraClsColor cam,10,100,255 Collisions 3,2,2,2 Collisions 4,2,2,2 Collisions 4,3,2,1 ;leben% = 100 For i=1 To 100 gegner.g = New g gegner\e = CreateCube() gegner\leben% = 100 gegner\x# = Rand(0,256) gegner\y# = 1 gegner\z# = Rand(0,256) ;gegner\sx# = 0.9 ;gegner\sy# = 0.9 ;gegner\sz# = 0.9 gegner\ty = 3 gegner\tex = box_tex PositionEntity gegner\e,gegner\x#,gegner\y#,gegner\z# EntityType gegner\e,gegner\ty EntityTexture gegner\e,gegner\tex Next While Not KeyHit (1) If KeyDown(200)=True Then MoveEntity f_k,0,0,0.1 If KeyDown(208)=True Then MoveEntity f_k,0,0,-0.1 If KeyDown(203)=True Then TurnEntity f_k,0,1,0 If KeyDown(205)=True Then TurnEntity f_k,0,-1,0 If KeyHit(28) Then PlaySound shot kugel.k = New k kugel\e = CreateSphere(5,cam) kugel\x# = EntityX(cam) kugel\y# = EntityY(cam) kugel\z# = EntityZ(cam) kugel\sx# = 0.2 kugel\sy# = 0.2 kugel\sz# = 0.2 kugel\tex = box_tex kugel\ty = 4 kugel\move# = 10 kugel\dista# = 50 zaehler% = zaehler% + 1 PositionEntity kugel\e,kugel\x#,kugel\y#,kugel\z# EntityType kugel\e,kugel\ty EntityTexture kugel\e,kugel\tex ScaleEntity kugel\e,kugel\sx#,kugel\sy#,kugel\sz# EndIf For kugel.k = Each k updateshot(kugel.k) freeshot(kugel.k) Next ;If EntityCollided(box,4) Then ;leben% = leben% - 1 ;PlaySound hit ;EndIf If EntityCollided(gegner\e,4) Then gegner\leben% = gegner\leben% - 1 PlaySound hit EndIf ;If leben% = 80 Then EntityTexture box,box_tex_hit ;If leben% = 50 Then EntityTexture box,box_tex_hit2 ;If leben% = 20 Then EntityTexture box,box_tex_hit3 ;If leben% = 0 Then ;ShowEntity boom ;EntityTexture box,box_tex_hit4 ;EntityType box,4 ;PlaySound explode ;leben% = leben% -1 ;HideEntity boom ;EndIf WaitTimer t# UpdateWorld() RenderWorld() Text 10,10, gegner\leben%;leben% Text 10,20, zaehler% Flip Wend End Function updateshot(kugel.k) MoveEntity kugel\e,0,0,1 End Function Function freeshot(kugel.k) If EntityDistance(cam,kugel\e) > 100 Or EntityCollided(kugel\e,3) Then zaehler% = zaehler% - 1 FreeEntity kugel\e Delete kugel EndIf End Function wie kann ich es hinbekommen, dass jedem cube einzeln, wenn ich ihn treffe lebenspunkte abgezogen werden? danke schonmal im vorraus ![]() |
||
Was passiert wenn man sich zweimal Halbtot gelacht hat? |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
a) Ich würde die Types ordentlich benennen. "g" und "k" sind für die Lokalen Variablen gut genug, nicht für die Types selbst:
Code: [AUSKLAPPEN] gegner.g = New g
g.Tgegner = New Tgegner ;<-- Besser! b) Du prüfst die gegner-Kollission nicht in einer for...each schleife. c) Wird der Sound geladen? Sind die Boxen an? Funktioniert's mit ChannelVolume ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sponsor |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu a) ok, ich werds mir für die zukunft merken.
zu b) meinst du, dass ich collisions nicht in einer for... each schleife habe? zu c) ja, ist geladen und es hat vorher, als ich es nicht mit types, sondern mit nur einem einzelnen cube versucht habe auch wunderbar funktioniert, genauso wie mit den lebenspunkten, hatte alles schon funktioniert, nur jett mit den Types nicht mehr.... ich kann ja mal das game hochladen, welches ich zuerst gemacht habe und indem es so funktioniert hat wie ich es wollte (halt nur mit dem einen cube...) ![]() so wie in dem hier soll es funktionieren, bloß halt das die gegner types sind und jeder einzeln 100 Lebenspunkte hat und das genau dem, den ich treffe 1 Lebenspunktabgezogen wird... |
||
Was passiert wenn man sich zweimal Halbtot gelacht hat? |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deine Kugeln updatest du in der Hauptschleife mit For...each:
Code: [AUSKLAPPEN] For kugel.k = Each k
updateshot(kugel.k) freeshot(kugel.k) Next Das ist fein. Dann kommt aber die gegner-kollision: Code: [AUSKLAPPEN] If EntityCollided(gegner\e,4) Then
Das prüft das Objekt, das als letztes in gegner gesteckt wurde, also vermutlich das zu letzt mit NEW erstellte. Da musst du ebenfalls eine For...each Konstruktion herum bauen. Momentan wird nur ein Type überprüft und wenn du den nicht triffst, gibt es auch keinen Sound... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sponsor |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, ich versteh erstmal was du meinst. danke
aber ich hab nicht so richig ein plan wie ich das mach, hab jetzt bisl rumprobiert, aber kam nichts bei rum... wenn ich so eine schleife drum rum bastel, dann funktioniert das mit dem lebenspunkten komischer weise nicht mehr. Also die Anzeige funktioniert nicht mehr die weiter unten als Text steht... "Objekt does not exist" Code: [AUSKLAPPEN] For gegner.g = Each g
If EntityCollided(gegner\e,4) Then gegner\leben% = gegner\leben% - 1 PlaySound hit EndIf Next |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Natürlich kann das nicht funktionieren: Die for..each schleife stopft nacheinander ein gegner-Objekt in die Variable "gegner" und wenn die komplette liste abgearbeitet wurde, das Null-Objekt. Nach einer for...each schleife enthält gegener also kein gültiges Objekt mehr.
Das Leben welchen Objekts willst du anzeigen? Erstes ![]() ![]() ![]() ![]() Um die Werte alle gegner aus zu geben, musst du wohl eine for..each Schleife verwenden (und am besten die Zeilen mit zählen um nicht alles übereinander zu zeichnen). |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Sponsor |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, danke erstmal für die erklärung:)
nun weiß ich nicht recht weiter.... ![]() mir kam gerade der gedanke, das ich immer das Leben des gegners anzeigen will, der beschossen wird. wenn das auch irgendwie geht... oder kann man das auch recht einfach mit einer anzeige in form eines Blakens über jedem gegner machen? P.s. hat leider etwas länger gedauert, da ich gestern unverhofft noch Termine bekommen hatte.... |
||
Was passiert wenn man sich zweimal Halbtot gelacht hat? |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine simple Möglichkeit:
BlitzBasic: [AUSKLAPPEN] Local g.Tgegner, LetzterGegner.Tgegner Der zuletzt getroffene Gegner wird in LetzterGegner abgelegt, damit kann man dann weiter arbeiten. Balken wären sicher hübscher, dafür musst du dich mit CameraProject ![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Action Ape |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst die Gegnerenergie auch einfach nur kurz auftauchen und wieder verschwinden lassen. Dann bräuchtest du keine extra Variable für den zuletzt beschossenen Gegner... | ||
:^1 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group