Types direct ansprechen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

juse4pro

Betreff: Types direct ansprechen

BeitragSo, Sep 14, 2008 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

mir sind bei zb. der escape gui, ein paar dinge aufgefallen, welche ich mir nicht erklären kann Wink
nun möchte ich diese dinge auch können:
-ich möchte types direkt ansprechen, wie
Beispiel:
Code: [AUSKLAPPEN]

type house
field x,y
field leben
end type


so häuser bauen
Code: [AUSKLAPPEN]

haus1=BuildHouse()  ;ist wirklich nur beispiel


und in meinem mainloop, OHNE eine for-schleife zu machen und auf die ID zu prüfen, was nämlich viel mehr performance klaut:
Code: [AUSKLAPPEN]

while not keyhit(1)
if haus1\leben<1 then DeleteHouse()
flip:cls
wend


falls ihr versteht, was ich meine, wäre ich euch sehr verbunden, wenn ihr mir helfen könntet^^

mfg mortus
Portfolio |LinkedIn |XING
 

da_poller

BeitragSo, Sep 14, 2008 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
also sagen wir du hast 7 types und willst den 4ten ansprechen?

einfach wäre es mit einem feld ind dann die id(die bei jedem erstellen eins höher ist ) dann zu filtern

hier mal so ca..

Code: [AUSKLAPPEN]
for a.b=Each b
  if a\nr=nr
    ;hier was du mit dem type machen willst
  endif
next


edit: sry letzten text wohl zu sehr überflogen.. meinen post einfach nciht beachten Razz
  • Zuletzt bearbeitet von da_poller am So, Sep 14, 2008 12:51, insgesamt einmal bearbeitet

Goodjee

BeitragSo, Sep 14, 2008 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
haus1 ist doch eine ganz normale variable, nur dass sie halt kein int sondern ebend ein haus speichert...das ist die erklärung...
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

juse4pro

BeitragSo, Sep 14, 2008 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@da_poller
ich will es ja o hinbekommen, dass ich KEINE extra forschleife benutzten muss...

@Goodjee
kp, was du mir damit sagen willst... Wink
Portfolio |LinkedIn |XING
 

da_poller

BeitragSo, Sep 14, 2008 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du vorher den wert schon weiß(welches haus du brauchst) könntest du versuchen einen pointer auf den type zu legen... ob das in bb bzw b3d funzt keine ahnun.. also so in wtwa

x=h.haus

aber wie gesagt keine garantie.

edit: getestet geht leider nciht.. "illegal type conversion"
  • Zuletzt bearbeitet von da_poller am So, Sep 14, 2008 12:57, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSo, Sep 14, 2008 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Beispielcode:
Code: [AUSKLAPPEN]
Type house
   Field x,y
   Field leben
End Type

Local haus1.house = BuildHouse(100)
Print haus1\leben
WaitKey()

Function BuildHouse.house(fLeben%)
   Local obj.house = New house
   obj\x = Rand(0,300)
   obj\y = Rand(0,300)
   obj\leben = fLeben
   Return obj
End Function


Wie du ohne Schleife für den Type auskommen möchtest, verstehe ich aber nicht so ganz.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

juse4pro

BeitragSo, Sep 14, 2008 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
genau das habe ich gemeint^^

@Xeres
wieso verstehst du das nicht, dass ich keine schleifen verwenden will, du hast es auch auch hier so gemacht:
Code: [AUSKLAPPEN]

Type house
   Field x,y
   Field leben
End Type

Local haus1.house = BuildHouse(100)
Print haus1\leben      ;<=================================== ohne forschleife
WaitKey()

Function BuildHouse.house(fLeben%)
   Local obj.house = New house
   obj\x = Rand(0,300)
   obj\y = Rand(0,300)
   obj\leben = fLeben
   Return obj
End Function
Portfolio |LinkedIn |XING

Xeres

Moderator

BeitragSo, Sep 14, 2008 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann verwendest du halt keine Schleife, brauchst dann aber immer eine Variable für jeden Type-Eintrag. Kommt darauf an, wie du dein Programm aufbaust.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

juse4pro

BeitragSo, Sep 14, 2008 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ich möchte ein spiel mit "türen" und Scripts ausrüsten^^
Portfolio |LinkedIn |XING

Goodjee

BeitragSo, Sep 14, 2008 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

a=5 ;normale variable vom typ int
b$="hallo" ;normale variable vom typ string
c.Haus = new Haus ;normale variable vom typ haus


somit hast du deine variable auf die du direkt zugreifen kannst und spartst dir folglich eine schleife um erst alle objekte vom typ haus zu "finden", weil du es ja die ganze zeit kennst und es folgilich nicht erst suchen musst
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

juse4pro

BeitragSo, Sep 14, 2008 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, das habe ich verstanden, aber was ist den nun die optimalste variante um ein scriptsystem zu proggen, und wie baue ich nun in den code folgende funktion ein:

Code: [AUSKLAPPEN]

Type house
   Field x,y
   Field leben
End Type

Local haus1.house = BuildHouse(100)
Print haus1\leben
HausVerschieben(haus1, 1, 1) ;wie mache ich das, ohne schleifen zum suchen
WaitKey()

Function BuildHouse.house(fLeben%)
   Local obj.house = New house
   obj\x = Rand(0,300)
   obj\y = Rand(0,300)
   obj\leben = fLeben
   Return obj
End Function


Portfolio |LinkedIn |XING

Xeres

Moderator

BeitragSo, Sep 14, 2008 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst ja nicht nur den Rückgabewert der Funktion definieren (bei BuildHouse wird ein "house" zurückgegeben) sondern auch die Parameter...
In unserem Beispiel...
Code: [AUSKLAPPEN]
Type house
   Field x,y
   Field leben
End Type

Local haus1.house = BuildHouse(100)

Print "x: "+haus1\x+" y: "+haus1\y
Print haus1\leben

HausVerschieben(haus1, +50, -50)
Print "x: "+haus1\x+" y: "+haus1\y
Print haus1\leben
WaitKey()

Function BuildHouse.house(fLeben%)
   Local obj.house = New house
   obj\x = Rand(0,300)
   obj\y = Rand(0,300)
   obj\leben = fLeben
   Return obj
End Function

Function HausVerschieben(fh.house, fx%, fy%)
   fh\x = fh\x + fx
   fh\y = fh\y + fy
End Function

Das existierende Haus wird an die Funktion übergeben... haus1 und fh (in der Funktion) verweisen beide auf den gleichen Type-Eintrag.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

juse4pro

BeitragSo, Sep 14, 2008 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
also irgentwie eine Abart von Pointer?

naja, ich habs jetzt verstanden, vielen Dank^^
Portfolio |LinkedIn |XING

BladeRunner

Moderator

BeitragSo, Sep 14, 2008 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Allerdings machst Du so den grössten Vorteil von Types, nämlich ihre Flexibilität, zunichte. so musst Du für jedes Objekt eine Variable in deinem Programm anlegen. Bei wenigen ok, bei Hunderten einfach nur Mist.
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
 

Matthias

BeitragSo, Sep 14, 2008 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau doch mal nach Handle und Objeckt.

https://www.blitzforum.de/help/Handle

Gruß Matthias.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group