* Für 3.3 Nutzer *

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja, automatisch geht nur das, was du automatisierst.

also, hier mal der kern fürn ganz billiges beispiel:

Code: Alles auswählen

x = 400 : y = 300
xm = 1 : ym = 1
Repeat
  ExamineKeyboard()
  ClearScreen(4,8,16)
  x + xm
  If x < 0 Or x > 800
    xm = -xm
  EndIf
  y + ym
  If y < 0 Or y > 600
    ym = -ym
  EndIf
  DisplaySprite(0,x,y)
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
den rest wie init, screen öffnen und sprite laden musste dir halt mal selber drumrum stricken.

grundsätzlich musst du erstmal ne vorstellung dafür bekommen,
was diese variablen wie machen, bevor du dir ausdenken kannst,
wie du eine selbstgestellte aufgabe löst, sprich,
dir einen algorithmus schreibst, der das tut was du willst.

es gibt noch zig beispiele mit sich bewegenden sprites in den foren,
auf der purearea, und auf deiner festplatte im examples-ordner.

versuch erstmal, ne menge beispiele zu durchschaun, was die variablen da überhaupt machen.

wenn wir dir hier jetzt irgendnen code vorkauen, dann hast du nix davon.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Machete @PB
Beiträge: 81
Registriert: 12.09.2006 03:12

Beitrag von Machete @PB »

stimmt auch wieder, hast Recht. Danke für Hilfe und Verständniss :allright:
Benutze Topos-PB-Version 3.3
Benutzeravatar
Machete @PB
Beiträge: 81
Registriert: 12.09.2006 03:12

Beitrag von Machete @PB »

Ich hab mal vom Beispiel Waponez was rauskopiert und halt statt "Bullet" Blasen_1 (es is nicht das wonach es sich vielleicht anhört;)) genommen. Der Code wird anscheinend auch angenommen. Wenn ich starte sieht man,wenn überhaupt, kurz den Hintergrund und dann kommt ne Windowsfehlermeldung: Programm hat einen Fehler festgestellt und muss beendet werden.

hier der Code:

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(1024, 768, 32, "Aquarium")

Gosub DisplayBlasen_1

Structure Blasen_1  
  x.w
  y.w
  Width.w
  Height.w
  Image.w
  SpeedY.w
EndStructure

NewList Blasen_1.Blasen_1()

Procedure AddBlasen_1(Sprite, x, y, SpeedX, SpeedY)
  AddElement(Blasen_1())           
  Blasen_1()\x      = x
  Blasen_1()\y      = y
  Blasen_1()\Width  = SpriteWidth(Sprite)
  Blasen_1()\Height = SpriteHeight(Sprite)
  Blasen_1()\Image  = Sprite  
  Blasen_1()\SpeedY = SpeedY
EndProcedure


Blasen_1SpeedY = 3

LoadSprite(0, "K:\Programme\PureBASIC\Screen\GFX\Aquarium.bmp", 0)
LoadSprite(1, "K:\Programme\PureBASIC\Screen\GFX\Blasen_1.bmp", 0)
LoadSprite(2, "K:\Programme\PureBASIC\Screen\GFX\Blasen_2.bmp", 0)

Repeat



FlipBuffers()

ClearScreen(0, 0, 0)
DisplaySprite(0, 0, 0)
ExamineKeyboard()

If KeyboardReleased(#PB_Key_Space)
    
        Blasen_1Delay = 10
               
        AddBlasen_1(1, 1024 , 768,  0    , -Blasen_1SpeedY)
        AddBlasen_1(2, 1024 , 768,  0    ,  Blasen_1SpeedY)
     
EndIf
Return 
DisplayBlasen_1:
  
  ResetList(Blasen_1())
  While NextElement(Blasen_1())  

    If Blasen_1()\y < 0          
      DeleteElement(Blasen_1())
    Else
      If Blasen_1()\x < 0        
        DeleteElement(Blasen_1())
      Else
        If Blasen_1()\x > 1024-Blasen_1()\Width
          DeleteElement(Blasen_1())
        Else
          If Blasen_1()\y > 768
            DeleteElement(Blasen_1())
          Else
            DisplayTransparentSprite(Blasen_1()\Image, Blasen_1()\x, Blasen_1()\y)   

            Blasen_1()\y + Blasen_1()\SpeedY

          EndIf
        EndIf
      EndIf
    EndIf
    Wend 
  

Until KeyboardReleased(#PB_Key_Escape)
[edit] ich wollte das unbedingt noch probieren und morgen dan begreifen ;)
Benutze Topos-PB-Version 3.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

...dann reichts ja, wenn man morgen antwortet... ;)

starte halt mal mit debugger und schau, was der ausgibt.
die win-meldung alleine ist nicht sehr aussagekräftig...
(ich hab jetzt kein bock mein 3.3 anzuwerfen, vielleicht morgen)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Machete @PB
Beiträge: 81
Registriert: 12.09.2006 03:12

Beitrag von Machete @PB »

kann ich verstehn :D
bis morgen.. äh bis gleich :wink:
Ich probier noch ein bisschen rum, ob ich noch nen anderen Fehler hinbekomm :allright:
Benutze Topos-PB-Version 3.3
Benutzeravatar
Machete @PB
Beiträge: 81
Registriert: 12.09.2006 03:12

Beitrag von Machete @PB »

ich weiss nicht ob ihr die Frage versteht aber hier:

gibt es eigentlich ein "Delay()" wo nicht für das ganze Programm zählt?


fals ihr euch gedacht habt, wo bleibt er (ich) denn mit den ganzen dummen, nervigen, doppelt und dreifach gestellten Fragen?, kann ich euch beruhigen. es gab bloss keine, weil ich im Krankenhaus war (ohne PC und I-Net) :freak: :lol: :cry:

vielen Dank im Voraus an die Gedankenleser und Geduldigen (fals sie es irgentwo da draussen noch gibt)
Benutze Topos-PB-Version 3.3
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Beitrag von mknjc »

Das mit dem Delay lässt sich nur durch Threads lösen.
Aber ist 3.3 eigentlich Threadsafe? Ich glabe nicht.
Dan blibt dir nichts anderes übrig als die Euronen zu spenden oder den Teil in ein Externes Prog zu bauen.

Mfg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> gibt es eigentlich ein "Delay()" wo nicht für das ganze Programm zählt?

denk andersrum.

mach deine hauptschleife ohne/mit kleinem delay, und bau einen zähler ein,
mit dem du dafür sorgst, dass gewisse dinge seltener passieren.

Code: Alles auswählen

Repeat  ; Hauptschleifenbeginn
;...
Delayer -1
If Delayer <=0
  Delayer = 5
  ; dieses hier wird nur jedes 5te mal ausgeführt
  ; ist also 5mal so langsam wie der Rest
EndIf
;...
Until EXIT  ; Hauptschleifenende
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

3.3 hat schon Thread , aber sie zu benutzen ist schwer für anfänger.(finde ich)

Du machst die deine Hauptschleife und machst die Schleife die du "langsammer" laufen lassen willst in einer Procedure die dann zu eineme Thread wird was dann parallel läuft.
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
Machete @PB
Beiträge: 81
Registriert: 12.09.2006 03:12

Beitrag von Machete @PB »

ok ich probiers ma :allright:

Danke
Benutze Topos-PB-Version 3.3
Antworten