Function - Type als Parameter...
Übersicht

BlitzBirneBetreff: Function - Type als Parameter... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich möchte mir das 50xe wiederholen von Code sparen...
1. Ich benutze 5 Types die die selbe Funktion durchlaufen sollen d.h. zb SPRITE 2. Die Types sind definiert und initiaslisiert. der Pseudo-Code sieht ZB so aus: Code: [AUSKLAPPEN] Function CollitestALL() for S.Sprite = each Sprite TST_COLL( S) next For E.Enemy = each Enemy TST_COLL(E) next ; etc pp end function function TST_COLL(TST) ; Teste -TST -auf -Collision-Code ; zB TST\POSX... end Function Nun, so wie es oben steht funzt es natürlich nicht. Object und Handle werden zwar Blau eingefärbt, aber existieren wohl nicht in B+ ![]() Von Globals halte ich garnichts... Hat da jemand eine Idee... ausser mich bei den entwicklern zu beschweren ![]() MfG |
||
![]() |
Jan_Ehemaliger AdminBetreff: Re: Function - Type als Parameter... |
![]() Antworten mit Zitat ![]() |
---|---|---|
verstehe deine frage nciht ganz.
Code: [AUSKLAPPEN] Function CollitestALL() for S.Sprite = each Sprite TST_COLL( S) next For E.Enemy = each Enemy TST_COLL(E) next ; etc pp end function function TST_COLL(TST.enemy) ; Teste -TST -auf -Collision-Code TST\POSX = 1 end Function ; und nun nochmal ein return function tst_neu.enemy() b.enemy=new enemy return b end function vielleicht war das was du suchtest. |
||
between angels and insects |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin,
Naja, entweder mit Object/Handle, oder du übergibst der function direct das Objek(glaube zumindest, dass das geht) Also So: Code: [AUSKLAPPEN] Function CreateSprite(x1#,y1#)
l.Sprite=New Sprite ... Return handle(l) End Function Function check(id) obj.Sprite=OBJECT.Sprite(id) ... End Function oder so: Code: [AUSKLAPPEN] Function CreateSprite.Sprite(x1#,y1#)
l.Sprite=New Sprite ... Return l End Function Function check(s.Sprite) ... End Function mfg Rone |
||
BlitzBirne |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für Eure Antworten ![]() Sorry, das ich nicht dabeischrieb was ich genau meinte... Ich möchte 5 verschiedene Types über EINE Function auf Kollision Testen. Diese Types wie Sprite, Tile etc sind bereits erstellt (mit new) Wenn ich diese Function weglassen würde, müsste ich etwa sowas proggen (Pseudocode): Code: [AUSKLAPPEN] Function Test_Colli() For S. Sprite = each Sprite ;Kompletten Collisionstest - Code next For T. Tile = each Tile ;Kompletten Collisionstest - Code next ; usw end Function Da ich es aber über EINE Function machen möchte ist das hier der PSEUDO-Code: Code: [AUSKLAPPEN] Function CollitestALL() for S.Sprite = each Sprite TST_COLL( S) ; <----- DA KLEMMTS ! next For E.Enemy = each Enemy TST_COLL(E) next ; etc pp end function function TST_COLL(TST) ; <---- HIER KLEMMTS ! ; Teste -TST -auf -Collision-Code ; zB TST\POSX... <---- HIER KLEMMTS ! TST nicht vorhanden... end Function Ich hoffe jetzt ist es eindeutiger, was ich meine ![]() Wenn es nötig ist, den Original Code zu zeigen, bitte bescheidgeben ( will nicht unnötig platz einnehmen) MfG |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da wird auch der Originalcode nichts helfen. Das geht aus prinzip nicht. Dazu müsstest du BlitzMax besitzen, das Vererbung unterstützt.
In Blitz3D musst du für jeden Type eine eigene Funktion schreiben. Deswegen am einfachsten einen neuen Type "TCollision" den du als Field bei allen types drin hast und dann nur den Testen. TCollision enthält dabei die für die Kollision notwendigen Informationen |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BlitzBirne |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, Drea ![]() Das ist natürlich auch eine Möglichkeit. Nur Vererbung braucht man dafür doch nicht (für das was ich vorhabe), denn ich will ja nur DAS bestimmte Type übergeben, was ich auf Kollision testen möchte. D.H: Ich grase alle Sprites (ZB) ab, und Teste in einer Function, ob die Maus (bzw die virtuelle Position ![]() Naja. Ich probiers auf jeden Fall aus ![]() MfG |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nun das geht auch.
Aber dann musst du für jeden Type eine Funktion schreiben, weil du kannst über die gleiche Übergabe nicht verschiedene Types übergeben (dafür wäre dann Vererbung notwendig damit du als Übergabetype den "Grundtype" nehmen könntest). Wenn du natürlich keine Kollision untereinander benötigst, sind 5 einzelne Kollisionsfunktionen kein Problem ![]() Aber ansonsten würde ich die Kollisionsdaten abstrahieren, so das du es mit einer einzigen Funktion machen kannst und die types unter einander auch kollidieren lassen kannst. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BlitzBirne |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir ist da grad ne unnütze Idee gekommen...
Wenn ich nur 1 Type erstelle, mit allen Daten von den anderen (die FIELDS) den ich dann zb OBJ nenne, brächte ich ja nur 1 Type abgrasen.... ABER.... dann müsste ich auch ALLES durch den Wolf drehen.... D.H.: Alles ob es nötig ist, oder nicht: * in der Kollionstestschleife druchzählen lassen * auf Bewegt oder nicht testen * ob es ein Item ist... wenn ich dies aufsammeln will * .... zuviel ![]() Also ich denke das würde dann doch absolut keinen Sinn machen... warum hat B+ dieses Feature bloss nicht... ich finds zum kotzen ![]() Vielleicht sollte ich mich doch ernster mit C++ beschäftigen *schnief* Was aber schade ist, denn B+ macht auch Spass... find ich... MfG |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es geht auch problemlos mit BB
Aber man muss sich wie in C++ auch, erst gedanken darüber machen wie man es machen möchte und es erst dann machen ... sonst muss man es halt mehrfach schreiben. (ok das muss man meistens selbst dann noch weil man später eine erweiterung reinpacken will die beim besten willen nicht ohne veränderung der struktur möglich ist) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BlitzBirne |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Joar ![]() Nur in C++ hätt ich das Problem mit den Zeigern nicht... ![]() Mit C++ brächte ich mir ja dann keine Notlösungen suchen ![]() MfG |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, denn schein C++ ja adäquat zu sein.
Aber mal im ernst: wenn Du nur die Koordinaten einer Bounding box übergeben willst mach für die Box nen eigenen Type (TColBox), pack die Koordinaten da hinein und mach diesen Type als field Deiner anderen Types. zB. Code: [AUSKLAPPEN] Type Tsprite
Field image Field Col.Tcolbox End Type Type TColbox Field x Field y Field w Field h End Type Function CreateSprite.Tsprite() a.tsprite = New tsprite a\col = New Tcolbox Return a End Function Function Collision(col.TColbox,x,y) If x >= col\x And x <= col\x + col\w Then If y >= col\y And y <= col\y + col\h Then Return 1 ;Kollision EndIf EndIf Return 0 End Function SeedRnd MilliSecs() a.Tsprite = CreateSprite() Repeat a\col\x = Rand (300) a\col\y = Rand (300) a\col\w = Rand (300) a\col\h = Rand (300) x = Rand (640) y = Rand (480) Print "x:"+x+" y:"+y+" ("+a\col\x+"|"+a\col\y+")-("+(a\col\x+a\col\w)+"|"+(a\col\y+a\col\h)+")" If collision (a\col,x,y) Then Print "Kolli!!!!" WaitKey() Until KeyHit(1) |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
BlitzBirne |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ui. ![]() Ich muss sagen, ein Interessanter Code ![]() Auf die Idee, ein Type in einem Field eines Types zu Packen, bin ich noch nicht gekommen ![]() Da werd ich mir mal was mit brauen ![]() Danke an alle ![]() MfG |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Deswegen am einfachsten einen neuen Type "TCollision" den du als Field bei allen types drin hast und dann nur den Testen. TCollision enthält dabei die für die Kollision notwendigen Informationen Wäre vielleicht nützlich wenn du Tips liest ohne das du funktionieren Code bekommst den du Copy Pasten kannst ... |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BlitzBirne |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
UPS ![]() Zitat: ... bei allen types DRIN hast.... das DRIN hab ich wohl überlesen, sorry ![]() Copy - Paste benutz ich grundsätzlich nicht. Ich finds nett wenn man das ANSCHAULICH zeigt, damit man auch zusammenhänge leichter versteht (für die Allgemeinheit) Ich bin natürlich auch Absolut dagegen, seien eigenen Kopf nicht zu benutzen, indem man nichtmal nen Ansatz von selbstdenken zeigt - und alles stück für Stück vorgekaut bekommen will. MfG |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group