Native Typen gehen nicht mehr mit Zeigern (neuere PB-Version

Für allgemeine Fragen zur Programmierung mit PureBasic.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Native Typen gehen nicht mehr mit Zeigern (neuere PB-Version

Beitrag von Agent »

Servus.

Ich habe seit längerem (2012) nicht mehr an einem Projekt gearbeitet. Versuche ich das in einer aktuelleren Version zu kompilieren bekomme ich den Fehler:

Code: Alles auswählen

Native Typen können nicht mit Zeigern verwendet werden
Der Fehler kommt in folgendem Code-Segment vor:

Code: Alles auswählen

Structure UNIT
  
  Active.b              ; useable
  Visible.b             ; Visible?
  TypeOfUnit.b          ; ground/air
  
  OwnerID.l             ; playerID (list)
  PlayerName${20}
  uniqueID${12}
  
  SpriteID.l            ; ID
  Sprite3DID.l          ; ID  
  Sprite3DID_shadow.l   ; Sprite for shadow
  
  Sprite3DID_2.l        ; 2nd ID for Laserbeam
  
  Animation_Timer.l      ; elapsedmiliseconds 
  Animation_SpriteID.l; First Sprite of Animation
  Animation_ActualFrame.b
  Animation_Frames.b    ; No of sprites following
  Animation_Delay.w     ; ms between frames
  
  SpriteWidth.w         ; width in px
  SpriteHeight.w        ; height in px
  
  TimeCreated.l           ; Time Element was created
  TimeActive.l        ; Delay when Element will be started/draw/executed ..
  
  InfoSpriteID.l        ; a separate sprite for unit information
  
  Name${32}             ; string
  
  AImode.b              ; Configuration for AI
  
  ViewRange.w
  
  XPforDestroying.w     ; XPs
  
  HackingSuccess.w        ; in %
  HackingTimer.l
  HackingReloadTimer.w  ; 
  
  PosX.f                ; px
  PosY.f                ; px
  Angle.f
  Moveable.b             ; true/false
  MoveToX.w             ; px
  MoveToY.w             ; px
  
  AttackSprite.l
  *AttackerElementHND.l <<<<<<<<----- HIER und wohl auch fortfahren bei allen mit *
  *TargetElementHND.l
  
  EnergySpriteID.l
  Energy.b              ; amount max 100
  EnergyReloadTimer.w   ; Break between reloading energy amount
  EnergyToMove.b        ; 
  EnergyTimer.l         ; last energy-kick
  
  HealthSpriteID.l
  Health.w              ; amount  
  FullHealth.w          ; amount
  HealthReloadTimer.w   ; time to heal in ms
  HealthTimer.l         ; timer
;  Shield.b              ; %
  Speed.w               ; amount
  
  AmmoSpriteID.l
  Ammo.w                ; amount
  AmmoPower.w           ; amount
  AmmoLoad.w            ; amount
  AmmoSpeed.w           ; amount
  AmmoType.l            ; Ammo SpriteID
  AmmoReloadTimer.w     ; Time to reload in ms
  AmmoLastShotTimer.l   ; Reloadtimer
  AmmoRange.w           ; blocks
  AmmoRadio.b           ; Explosion-Radius in blocks
  AmmoFailChance.w      ; 
  
  EnemiesKilled.w
  
  CargoLoad.w           ; amount
  MaxCargo.w            ; amout
  CargoLoadTimer.l      ; Time to pick up cargo/collect (iron)
  CargoTimer.l          ; timer to wait for next collecting / loading
  
  OperationMode.b
  
  BuildResource.l       ; sprite id resource
  BuildCosts.w          ; amount
  BuildTime.l           ; When build
  BuildDelay.w          ; time to build
  
  dummy.f               ; for anything
  
EndStructure
Unter PB 5.0 habe ich gerade getestet geht es noch. In einer neueren PB nicht mehr.
Gibt es eine einfache Lösung das Problem in eine aktuelle PB zu bekommen ohne 11.000 Zeilen Code zu überarbeiten oder bleibt mir nur 5.0 zu nutzen?

Danke!
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von RSBasic »

Einfach den Datentyp bei Pointern entfernen:

Code: Alles auswählen

Structure UNIT
 
  Active.b              ; useable
  Visible.b             ; Visible?
  TypeOfUnit.b          ; ground/air
 
  OwnerID.l             ; playerID (list)
  PlayerName${20}
  uniqueID${12}
 
  SpriteID.l            ; ID
  Sprite3DID.l          ; ID 
  Sprite3DID_shadow.l   ; Sprite for shadow
 
  Sprite3DID_2.l        ; 2nd ID for Laserbeam
 
  Animation_Timer.l      ; elapsedmiliseconds
  Animation_SpriteID.l; First Sprite of Animation
  Animation_ActualFrame.b
  Animation_Frames.b    ; No of sprites following
  Animation_Delay.w     ; ms between frames
 
  SpriteWidth.w         ; width in px
  SpriteHeight.w        ; height in px
 
  TimeCreated.l           ; Time Element was created
  TimeActive.l        ; Delay when Element will be started/draw/executed ..
 
  InfoSpriteID.l        ; a separate sprite for unit information
 
  Name${32}             ; string
 
  AImode.b              ; Configuration for AI
 
  ViewRange.w
 
  XPforDestroying.w     ; XPs
 
  HackingSuccess.w        ; in %
  HackingTimer.l
  HackingReloadTimer.w  ;
 
  PosX.f                ; px
  PosY.f                ; px
  Angle.f
  Moveable.b             ; true/false
  MoveToX.w             ; px
  MoveToY.w             ; px
 
  AttackSprite.l
  *AttackerElementHND
  *TargetElementHND
 
  EnergySpriteID.l
  Energy.b              ; amount max 100
  EnergyReloadTimer.w   ; Break between reloading energy amount
  EnergyToMove.b        ;
  EnergyTimer.l         ; last energy-kick
 
  HealthSpriteID.l
  Health.w              ; amount 
  FullHealth.w          ; amount
  HealthReloadTimer.w   ; time to heal in ms
  HealthTimer.l         ; timer
;  Shield.b              ; %
  Speed.w               ; amount
 
  AmmoSpriteID.l
  Ammo.w                ; amount
  AmmoPower.w           ; amount
  AmmoLoad.w            ; amount
  AmmoSpeed.w           ; amount
  AmmoType.l            ; Ammo SpriteID
  AmmoReloadTimer.w     ; Time to reload in ms
  AmmoLastShotTimer.l   ; Reloadtimer
  AmmoRange.w           ; blocks
  AmmoRadio.b           ; Explosion-Radius in blocks
  AmmoFailChance.w      ;
 
  EnemiesKilled.w
 
  CargoLoad.w           ; amount
  MaxCargo.w            ; amout
  CargoLoadTimer.l      ; Time to pick up cargo/collect (iron)
  CargoTimer.l          ; timer to wait for next collecting / loading
 
  OperationMode.b
 
  BuildResource.l       ; sprite id resource
  BuildCosts.w          ; amount
  BuildTime.l           ; When build
  BuildDelay.w          ; time to build
 
  dummy.f               ; for anything
 
EndStructure
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von NicTheQuick »

Zur Erklärung: Pointer mit einem nativen Typ haben noch nie Sinn gemacht, deswegen wurden sie logischerweise verboten. Nur Pointer mit einer Struktur machen Sinn.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von ts-soft »

Erklärung: Zeiger (Pointer) haben keinen nativen Typ, da heißt sie sind weder Long, Word oder Integer. Es sind
Speicheradressen (deren Wert in ein Integer paßt, aber kein Integer ist).

//edit
zu spät :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von Agent »

:freak:

Oh man, ich sollte noch ein Kaffee trinken! Danke!
Ich stand mal total auf der Leitung. Ich dachte eben "Wieso kann ich keinen Pointer mehr nutzen?" :D

Logo, wie kam ich damals denn drauf einem Pointer überhaupt ein Typ (long) zu geben? Ich stand sicher unter Drogen oder ähnliches.

Naja...man wird älter ;-)
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von Agent »

Aber dann kann ich vielleicht ne kurze andere Frage in dem Projekt stellen:

Code: Alles auswählen

DisplayTranslucentSprite()
wurde ja entfernt.
Bevor ich jetzt lang suche vielleicht habt ihr ja fix ein Tip. Was nehme ich stattdessen? Displaytransparentsprite?

//Edit.
Ok, habs grad in der Hilfe gesehen. DisplayTransparentSprite wurde mit entsprechenden Parametern erweitert.

Brauche ich jetzt noch die SpecialFX?
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von RSBasic »

Drücke bei dir die F1-Taste. Öffne die Seite "Geschichte" und suche nach "DisplayTranslucentSprite". Dann findest du die folgende Beschreibung:
- Entfernt: DisplayTranslucentSprite() -> ersetzt mit dem 'Alpha' Parameter bei DisplayTransparentSprite()
\\Edit:
Zu langsam.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von Agent »

Oh ha!

Wie ich gerade feststelle, wurde ja die komplette Sprite3D entfernt :freak:

Sehe ich das richtig, da steht mir viel arbeit bevor alles auf die aktuellen Sprite-Befehle zu ändern? *zitter*

...muss mal suchen obs da ein Thread dazu gibt der da drauf eingeht...
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von RSBasic »

Nein, nur umbenannt:
- Geändert: ZoomSprite3D() in ZoomSprite() umbenannt
- Geändert: TransformSprite3D() in TransformSprite() umbenannt
- Geändert: RotateSprite3D() in RotateSprite() umbenannt
- Geändert: Sprite3DQuality() in SpriteQuality() umbenannt
- Geändert: Sprite3DBlending() in SpriteBlending() umbenannt
- Entfernt: Sprite3D Bibliothek (verschmolzen mit der regulären Sprite Bibliothek)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Re: Native Typen gehen nicht mehr mit Zeigern (neuere PB-Ver

Beitrag von Sven »

Agent hat geschrieben:Sehe ich das richtig, da steht mir viel arbeit bevor alles auf die aktuellen Sprite-Befehle zu ändern?
Das Ändern nicht, aber gewöhn Dich schon mal dran, daß die Befehle nicht das machen, was Du erwartest.

Gerade das TransparantSprite mit Alphachannel kann da sehr zickig und unberechenbar sein. Das reagiert schon anders, wenn Du nur zwischen OpenGL und DirectX wechselst.
Antworten