Sprites

Nieuwe Liberty BASIC programmeurs kunnen hier om hulp vragen.

Moderators: anthonio, Abcott

Sprites

Berichtdoor ForNext » di okt 28, 2008 2:48 pm

Ik heb kans gezien wat hondjes en mannetjes over een draaiende achtergrond te laten hollen, resp lopen, maar een draaiend kleuren blokje op een zwarte achtergrond laat het afweten.
Wat zit er niet goed?

m.vr.gr.
Rob
Bijlagen
spriteblocs.zip
in de "bas" zullen de directories even moeten worden aangepast
(6.04 KiB) 189 keer gedownload
Cursist LB Amstelveen
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen

Re: Sprites

Berichtdoor Gordon » di okt 28, 2008 10:20 pm

Hallo Rob,

Je bent op de goede weg.
Je plaatjes zijn echter nog geen sprites.
Een sprite kun je maken door een BMP plaatje
om te bouwen tot een SPRITE met het hulp programma
uit de help file. Hier is die listing:

Code: Selecteer alles
'small utility to add masks to the
'top of sprite images for use in LB3

if val(Version$)<3 then
    notice "This program is for LB3 only!"
    end
end if

nomainwin
bmpheight=0     'bitmap height
bmpwidth=0      'bitmap width

bitmap$=""      'bitmap file name
savefile$=""    'save file name
hBitmap=0       'handle for loaded bitmap
hWindow=0       'window handle

menu #1, "&File", "&Open Sprite",[openSprite],_
    "&Save As...",[saveAs],|,"E&xit",[quit]

open "Add Masks to Sprites" for graphics_fs_nsb as #1
    print #1, "trapclose [quit]"
    print #1, "down;place 20 40"
    print #1, "|Open the desired sprite image."
    print #1, "|A mask will be added to the sprite "
    print #1, "|as you watch."

    print #1, "|This might take time for large images."
    print #1, "|Images larger than the window "
    print #1, "|will be cut off."
    print #1, "|If it is satisfactory, choose "
    print #1, "|'Save As...' from the File menu."
    hWindow=hwnd(#1)


[loop]
    input aVar$

[quit]
    close #1:end

[openSprite]
    if hBitmap<>0 then
        unloadbmp ("bm")
        print #1, "cls"
    end if

    filedialog "Open Sprite","*.bmp",bitmap$
    if bitmap$="" then

        notice "No bitmap chosen!"
        goto [loop]
    end if

    print #1, "cls"
    loadbmp "bm" , bitmap$
    hBitmap=hbmp("bm")

    print #1, "down;drawbmp bm 0 0"

    bmpheight=HeightBitmap(bitmap$)
    bmpwidth=WidthBitmap(bitmap$)

    print #1, "drawbmp bm 0 ";bmpheight

    call MakeMask bmpwidth, bmpheight, hWindow
    goto [loop]


[saveAs]
    print #1, "getbmp SpriteMask 0 0 ";bmpwidth;" ";2*bmpheight

    filedialog "Save As... ","*.bmp",savefile$

    if savefile$="" then
        notice "No filename specified!"
        goto [loop]
    end if

    bmpsave "SpriteMask",savefile$
    notice "Sprite and mask saved as ";savefile$
    goto [loop]


'************FUNCTIONS******************
function WidthBitmap(name$)
    open name$ for input as #pic
    pic$=input$(#pic,29)
    close #pic
    WidthBitmap = asc(mid$(pic$,19,1)) + _
        (asc(mid$(pic$,20,1)) * 256)
  end function

function HeightBitmap(name$)

    open name$ for input as #pic
    pic$=input$(#pic,29)
    close #pic
    HeightBitmap = asc(mid$(pic$,23,1)) + _
        (asc(mid$(pic$,24,1)) * 256)
  end function


sub MakeMask wide, high, hWnd

    cursor hourglass
    white=(255*256*256)+(255*256)+255
    black=0

    open "user32" for dll as #user
    Open "gdi32"for DLL as #gdi

    CallDll #user, "GetDC",_
        hWnd as long,_
        hDC as long

    for i = 0 to wide-1
        for j = 0 to high-1

            CallDll #gdi, "GetPixel",_
                hDC as long,_
                i as long,_
                j as long,_
                pColor as long

            if pColor=black then
                newColor=white
            else
                newColor=black
            end if

            CallDll #gdi, "SetPixel",_
                hDC as long,_
                i as long, _
                j as long, _
                newColor as long, _
                r as long

        next j
    next i

    CallDll #user, "ReleaseDC",_
            hWnd as long,_
            hDC as long,_
            r as long

    close #user
    close #gdi
    cursor normal
  end sub


Knip en plak deze listing in de Liberty BASIC editor.
Bewaar het vervolgens bijv. onder de naam: MASKMAKER.BAS
Je zult deze listing vaak nodig hebben als je een sprite wilt maken.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Sprites

Berichtdoor ForNext » di okt 28, 2008 11:39 pm

Beste Gordon,

Lekker dom van mij.
Heb ik van alle voorgaande bmp´s (hondjes en mannetjes) sprites gemaakt en ben ik dat bij deze blokjes gewoonweg vergeten.
Inmiddels heb ik ze allemaal gemaskerd en het programmaatje doet het, zoals ik verwachtte.
Ik heb wel de achtergrond wit gemaakt. Dan "blokt" het beter.
Anyway, dank voor de aanwijzing.

Ciao,
Rob
Cursist LB Amstelveen
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen

Re: Sprites

Berichtdoor ForNext » do nov 13, 2008 9:45 pm

Daar ben ik weer even.
Van bijgaande vliegende pelikaan krijg ik maar een deel te zien. En dan vliegt hij uit beeld.
Het zijn nogal wat "brede" sprites. Misschien te breed?
ciao,
Rob
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen

Re: Sprites

Berichtdoor ForNext » zo nov 16, 2008 9:44 pm

Voormelde probleem inmiddels opgelost door vensterformaten (250 hoog bij 750 breed) in de listing op te nemen.
m.vr.gr.
Cursist LB Amstelveen
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen

Re: Sprites

Berichtdoor ForNext » do nov 20, 2008 2:02 pm

Ik ben nog even bezig met die sprites.
Maar ik stuit nu op een probleempje dat ik de achtergrond niet lekker "vloeiend" kan laten draaien.
Het lijkt net alsof de achtergrond telkens weer opnieuw begint, maar ook weer niet helemaal.
Ik heb het complete pretprogramaatje als zip bijgesloten.
Ciao,
Roberto
Bijlagen
lhb moving.zip
(9.08 KiB) 195 keer gedownload
ForNext
 
Berichten: 60
Geregistreerd: za okt 27, 2007 9:40 am
Woonplaats: Amstelveen

Re: Sprites

Berichtdoor Gordon » do nov 20, 2008 9:35 pm

Hallo Rob,

Plaats een rem voor de "drawsprites" statements van
[wijzig0] enz.
De Timer die je gebruikt gaat naar een routine waar ook al drawsprites staat
en dat is reeds voldoende.

Ik ben van mening dat dit een bug is in de "backgroundxy" functie van Liberty BASIC.
Die functie wordt bij elke refresh (nieuwe drawsprites) gereset op zijn oorspronkelijke waarde.

Trouwens, je hebt aan twee sprites reeds genoeg als je het "mirror" commando
voor de sprites zou gebruiken.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Sprites

Berichtdoor Gordon » di dec 02, 2008 4:27 pm

ForNext schreef:Daar ben ik weer even.
Van bijgaande vliegende pelikaan krijg ik maar een deel te zien. En dan vliegt hij uit beeld.
Het zijn nogal wat "brede" sprites. Misschien te breed?
ciao,
Rob


Bijgaande vliegende pelikaan?

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am


Keer terug naar Beginner

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron