Seite 1 von 3
Data+Proceduren
Verfasst: 11.11.2007 02:14
von STARGÅTE
Tachchen,
ich habe mal n Frage:
Das muss an die Stelle wo ... ist:
Code: Alles auswählen
Procedure CatchObjekt(*Adresse)
Restore ...
Read nn
For n = 1 to nn
Read x
Read y
Next
EndProcedure
CatchObjekt(?Raumschiff_1)
DataSection
Raumschiff_1:
Data.l 4, 0,-20, -20,20, 0,10, 20,20
Oder muss ich das anders machen ?
Verfasst: 11.11.2007 02:56
von ZeHa
Ich kapier Dein Posting zwar überhaupt nicht, aber rein vom Code her würde ich sagen, Deine drei Pünktchen mußt Du durch *Adresse ersetzen, dann müßte "das" laufen.
Verfasst: 11.11.2007 03:33
von STARGÅTE
ne hat nicht gefunzt, ich habe es jetzt mit PeekL() gemacht...
hat sich also erledigt
TOPIC CLOSE
Verfasst: 11.11.2007 11:09
von Criss
Wärst Du dann so lieb und könntest uns Dein PeekL()-Beispiel auch noch mitteilen!

Danke!
Verfasst: 11.11.2007 11:48
von edel
hier ein Beispiel, allerdings ohne Peek :
Code: Alles auswählen
DataSection
Raumschiff_1:
Data.l 4, 0,-20,-20,20,0,10,20,20
Raumschiff_1_e:
EndDataSection
Structure Raumschiff
dat.l[0]
EndStructure
*rm.Raumschiff = ?Raumschiff_1
count = (?Raumschiff_1_e - ?Raumschiff_1) / 4
For i = 0 To count
Debug *rm\dat[i]
Next
Verfasst: 11.11.2007 13:00
von #NULL
@stargate
Restore verlangt ein labelbezeichner (nicht die addresse), und den kannst du nicht mit variablen ersetzten. macros haste ja leider nich'.
kannst es ja einfach so machen, falls du Read beuntzten willst:
und das restore in der proc weglassen.
was edel macht ist aber auch lecker
Verfasst: 11.11.2007 14:01
von STARGÅTE
jo hier die PeekL() fassung ^^
Code: Alles auswählen
Procedure CatchObjekt(*Adresse)
*Memory = *Adresse
nn = ReadMemoryLong()
For n = 1 to nn
x = ReadMemoryLong()
y = ReadMemoryLong()
Next
EndProcedure
CatchObjekt(?Raumschiff_1)
DataSection
Raumschiff_1:
Data.l 4, 0,-20, -20,20, 0,10, 20,20
für die, die die Procedure ReadMemoryLong nicht haben :
Code: Alles auswählen
Global *Memory
Procedure.l ReadMemoryLong()
Long.l = PeekL(*Memory)
*Memory = *Memory + 4
ProcedureReturn Long
EndProcedure
Verfasst: 11.11.2007 17:27
von NicTheQuick
Mit einem Macro wäre das viel einfacher:
Code: Alles auswählen
Macro ReadMemoryLong(Adresse)
PeekL(Adresse) : Adresse + SizeOf(Long) :
EndMacro
Procedure CatchObjekt(*Adresse)
Protected nn.l, n.l
nn = ReadMemoryLong(*Adresse)
For n = 1 to nn
x = ReadMemoryLong(*Adresse)
y = ReadMemoryLong(*Adresse)
Next
EndProcedure
CatchObjekt(?Raumschiff_1)
DataSection
Raumschiff_1:
Data.l 4, 0,-20, -20,20, 0,10, 20,20
@STARGÅTE:
Außerdem hätte ich dir nicht zugetraut 'Protected' zu vergessen.
Verfasst: 11.11.2007 17:33
von STARGÅTE
ob du es glaubst oder nicht, 'Protected' habe ich noch
NIE verwendet.
Liegt daran das ich für mich feste VAR habe die niemals estwas anderes sind :
zB:
Laufvariablen : n,i,k,j
da dazu gehörenden maxima : nn,ii,kk,jj
ein n wird also niemal bei meinem cods Global werden oder eine andere Aufgabe haben.
genauso winde ich sowas ReadMemoryLong(*Adresse) überflüssig, deswegen bin ich auch so froh 3.3 noch zu benutzen:
ReadLong() und nicht wie ihr ReadLong(File),
denn das ist immer wieder ein Parameter mehr, der Zeit in anspruch nimmt, da finde ich UseFile besser

Verfasst: 11.11.2007 17:41
von edel
STARGÅTE hat geschrieben:
ReadLong() und nicht wie ihr ReadLong(File),
denn das ist immer wieder ein Parameter mehr, der Zeit in anspruch nimmt, da finde ich UseFile besser

Ich bezweifel sehr stark das ReadLong() schneller sein soll. Der Parameter
muss ja schliesslich auch noch aus dem Speicher geholt werden. was das
ganze wieder langsamer macht
