Dark Bit Factory & Gravity
PROGRAMMING => Purebasic => Topic started by: Shockwave on February 28, 2007
-
This needs the font in the archive attached to this post, there is also an exe in the archive for those without PB :)
This is an example of how to make a bitmap sine scroll using Purebasic.
; Sine Scroll Coded By Nick Simpson 2005.
;
;
;============================================================================================
Global xres.w , yres.w , loop.w ,xp.w , yp.w , t$.s , tptr.w , sco.b
xres = 800
yres = 600
sco=0
tptr=1
t$=" "
t$=t$+"HELLO.. THIS IS MY FIRST ATTEMPT AT A DEMO WRITTEN IN PUREBASIC, THE LANGUAGE SEEMS TO BE A LITTLE BIT TRICKY "
t$=t$+"BUT IN FAIRNESS IT'S LEARNABLE AT LEAST AND IT SEEMS TO BE QUITE FAST SO I'LL PUT UP WITH IT... "
t$=t$+"NOW TO ADD SOME STARS, A LOGO AND SOME MUSIC AND THEN IT WILL BE FINISHED... HAPPY 2006.. NICK."
t$=t$+" "
Dim gfxfont(60)
InitSprite()
UsePNGImageDecoder()
window = OpenScreen( xres , yres , 32 , "PBWINDOW")
font=LoadImage (#PB_Any,"font.PNG")
InitKeyboard()
StartDrawing (ScreenOutput())
DrawImage (UseImage(font),0,0)
StopDrawing()
xp=0
yp=0
For loop=1 To 60
gfxfont(loop)=GrabImage(font,#PB_Any,xp,yp,31,31)
xp=xp+32
If xp>=320
yp=yp+33
xp=0
EndIf
Next
Repeat
StartDrawing (ScreenOutput())
;DrawImage (UseImage(font),0,0)
cco=0
For cc=0 To 25
letter=(Asc(Mid(t$,tptr+cc,1))-31)
DrawImage(UseImage(gfxfont(letter)),(sco+cco),300+50*Sin((cc+cco+sco+m)/120))
cco=cco+32
Next
m=m-5
sco=sco-3
If sco<-32
tptr=tptr+1
sco=sco+32
EndIf
If tptr>(Len(t$)-30 )
tptr=1
EndIf
StopDrawing()
ExamineKeyboard()
FlipBuffers()
ClearScreen(0,0,0)
Until KeyboardPushed (#PB_Key_Escape)
End
-
Wow. Shocky. Thanks for posting. Nice one. Didn't know that you have a
purebasic copy ? Cool ...
-
When I finished using Blitz and returned to coding, I hadn't decided which language I was going to take up next.. At the time I was tempted by PB and I wrote a few things in it over the space of about a week.
Then I decided to try Freebasic.. Now I have to be honest and say that I like Purebasic's syntax better, as a language to code in I enjoyed it more but since everyone else around me seemed to be using FB and I intended to base the forum around one core language at the time, I chose Freebasic and left my experiments in PB where they were.
But yes, I do have a PB licence and full copy and I might do a bit more in this language in the future. It would be good to attract users of all kinds of languages here and to do that we need to have support for them. :)
-
Nice demo shocky.
i like also the font , can i use it with my work?
-
Sure, but you should know that I didn't draw that font, I found it somewhere :)
-
thanks :)
-
Nice work shockwave... i have updated the source to work with PB v4.02... btw, dont use StringName$.s because String.s and String$ are not the same thing (its silly i know ^^) So here we go with the updated versio
; Sine Scroll Coded By Nick Simpson 2005.
; Updated a bit, commented and added error handling to work with PB v4.02
; by va!n (thorsten will) in 2007
;
;============================================================================================
Global xres.w , yres.w , loop.w ,xp.w , yp.w , t.s , tptr.w , sco.b
xres = 800 ; ScreenWidth
yres = 600 ; ScreenHeight
sco = 0
tptr = 1
t.s = " "
t.s = t.s+"HELLO.. THIS IS MY FIRST ATTEMPT AT A DEMO WRITTEN IN PUREBASIC, THE LANGUAGE SEEMS TO BE A LITTLE BIT TRICKY "
t.s = t.s+"BUT IN FAIRNESS IT'S LEARNABLE AT LEAST AND IT SEEMS TO BE QUITE FAST SO I'LL PUT UP WITH IT... "
t.s = t.s+"NOW TO ADD SOME STARS, A LOGO AND SOME MUSIC AND THEN IT WILL BE FINISHED... HAPPY 2006.. NICK."
t.s = t.s+" "
; -------- Init needed Stuff --------
InitSprite() ; Needed to init DX Screen and DX Drawings
InitKeyboard() ; Needed for handling DX keyboard inputs
UsePNGImageDecoder() ; Needed to work with PNG Image
Dim gfxfont(60) ; DIM for handling the handle of each char image
; -------- Load Font Gfx --------
font = LoadImage (#PB_Any, "font.PNG") ; Load the font PNG image
If font = 0 ; If loading image failed,
MessageRequester("Error", "Cant load font.PNG", 0) ; we alert an error and
End ; stop the application
EndIf
; -------- If Font successfully load, open Screen --------
window = OpenScreen( xres , yres , 32 , "PBWINDOW") ; Open DirectX Screen
If window = 0 ; If creating DX screen failed,
MessageRequester("Error", "Cant open Window", 0) ; we alert an error and
End ; stop the application
EndIf
; -------- Creating for each bitmap char an own Image --------
StartDrawing (ScreenOutput()) ; Drawing loaded FONT Image
DrawImage (ImageID(font),0,0) ; to the DX screen...
StopDrawing()
xp = 0
yp = 0
For loop =1 To 60 ; Grabing from the screen
gfxfont(loop) = GrabImage(font,#PB_Any,xp,yp,31,31) ; each char as single image
xp = xp + 32 ; and save its handle to the
; ; DIM gfxfont()
If xp > = 320
yp = yp + 33
xp = 0
EndIf
Next
; -------- MainLoop --------
Repeat
ClearScreen($0) ; Clear Screen with color $0
ExamineKeyboard() ; Update for keyboard inputs
StartDrawing (ScreenOutput()) ; Start drawing on DX Screen
cco = 0
For cc = 0 To 25
letter = (Asc(Mid(t.s, tptr+cc, 1))-31)
DrawImage (ImageID(gfxfont(letter)), (sco+cco), 300+50*Sin((cc+cco+sco+m)/120))
cco = cco + 32
Next
m = m -5
sco = sco -3
If sco < -32
tptr = tptr + 1
sco=sco + 32
EndIf
If tptr > (Len(t.s)-30 )
tptr = 1
EndIf
StopDrawing() ; Stop drawing on DX Screen
FlipBuffers() ; Bring backround buffer to forground
Until KeyboardPushed (#PB_Key_Escape) ; Repeats until key ESCAPE has pressed
End
-
Here is another modified version, using DX Sprites instead Images and just only the Font PNG as Sprite... This version dont use an array for handling each FontChar... This Version is using just one big sprite and clipping to get the needed char out of the big sprite...
I am very tired and i m a bit confused about my source, because i think there is somehting wired and wrong... i will take later a look ^^ so sorry, if the code suxx, my concentration is out of power now ^^
; Sine Scroll Coded By Nick Simpson 2005.
; Updated to work with PB v4.02 and changed the code to work with DX Sprites indeed Images
; by va!n (thorsten will) in 2007
;
;============================================================================================
Global xres.w , yres.w , loop.w ,xp.w , yp.w , t.s , tptr.w , sco.b
xres = 800 ; ScreenWidth
yres = 600 ; ScreenHeight
sco = 0
tptr = 1
t.s = " "
t.s = t.s + "HELLO.. THIS IS MY FIRST ATTEMPT AT A DEMO WRITTEN IN PUREBASIC, THE LANGUAGE SEEMS TO BE A LITTLE BIT TRICKY "
t.s = t.s + "BUT IN FAIRNESS IT'S LEARNABLE AT LEAST AND IT SEEMS TO BE QUITE FAST SO I'LL PUT UP WITH IT... "
t.s = t.s + "NOW TO ADD SOME STARS, A LOGO AND SOME MUSIC AND THEN IT WILL BE FINISHED... HAPPY 2006.. NICK."
t.s = t.s + " "
; -------- Init needed Stuff --------
InitSprite() ; Needed to init DX Screen and DX Drawings
InitKeyboard() ; Needed for handling DX keyboard inputs
UsePNGImageDecoder() ; Needed to work with PNG Image
; -------- If Font successfully load, open Screen --------
window = OpenScreen( xres , yres , 32 , "PBWINDOW") ; Open DirectX Screen
If window = 0 ; If creating DX screen failed,
MessageRequester("Error", "Cant open Window", 0) ; we alert an error and
End ; stop the application
EndIf
; -------- Load Font Gfx as Sprite--------
font = LoadSprite (#PB_Any, "font.PNG") ; Load the font PNG as Sprite
If font = 0 ; If loading Spritefailed,
MessageRequester("Error", "Cant load font.PNG", 0) ; we alert an error and
End ; stop the application
EndIf
; -------- MainLoop --------
Repeat
ClearScreen($0) ; Clear Screen with color $0
ExamineKeyboard() ; Update for keyboard inputs
cco = 0
For cc = 0 To 25
letter = Asc(Mid(t.s, tptr+cc, 1))-31
yCharPos = letter / 10
xCharPos = letter % 10
If xCharPos = -1 : xCharPos = 9
ElseIf xCharPos > 0 : xCharPos = xCharPos - 1
EndIf
ClipSprite(font, xCharPos*32, yCharPos*33, 31, 32)
DisplaySprite(font, sco+cco, 300+50*Sin((cc+cco+sco+m)/120))
cco = cco + 32
Next
m = m -5
sco = sco -3
;
If sco < -32
tptr = tptr + 1
sco = sco + 32
EndIf
;
If tptr > Len(t.s)-30
tptr = 1
EndIf
; Stop drawing on DX Screen
FlipBuffers() ; Bring backround buffer to forground
Until KeyboardPushed (#PB_Key_Escape) ; Repeats until key ESCAPE has pressed
End
-
Thanks va!n :) Always nice to have some Pbscource :D Have some Karma.
-
Apologies for resurrecting this old thread...
I completely forgot to mention in other threads I started for my recent releases that knowledge gained from the posts above enabled me to write my own scrolling message routines, leading to eventually heavily rewriting and adding various effects.
My modified and enhanced code can be found in the downloads (sources included in the downloads) in the following threads; I hope someone finds them useful:
http://www.dbfinteractive.com/forum/index.php?topic=6756.0
http://www.dbfinteractive.com/forum/index.php?topic=6766.0
A - --H U G E-- - thanks to 'Shockwave' and 'va!n' for their posts and idea and humble apologies for not mentioning them in my scrolling messages. I bow down before your greatness! ;)
Regards
aNdy/AL/Cosine