Data+Proceduren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Data+Proceduren

Beitrag 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 ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ne hat nicht gefunzt, ich habe es jetzt mit PeekL() gemacht...

hat sich also erledigt

TOPIC CLOSE
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

Beitrag von Criss »

Wärst Du dann so lieb und könntest uns Dein PeekL()-Beispiel auch noch mitteilen! :D Danke!
"Zu glauben, der Mensch sei Einschränkungen unterworfen, ist die grösste Illusion von allen." Robert Allan Monroe
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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:

Code: Alles auswählen

Restore Raumschiff_1 :: CatchObjekt()
und das restore in der proc weglassen.
was edel macht ist aber auch lecker
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 :-)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 ;)
Antworten