How to handle sprite direction

Advanced game related topics
User avatar
em_uk
Enthusiast
Enthusiast
Posts: 366
Joined: Sun Aug 08, 2010 3:32 pm
Location: Manchester UK

How to handle sprite direction

Post by em_uk »

I did this last night, but for the life of me I couldn't work out a good method for showing the right facing sprite and animating.

I was up till 3:40am, in the end I scooped up my brain from my desk and went to bed.

There's lots wrong with this code, lots of unneeded bits, but I wanted to be able to easily expand things should I be on the right track. I've done routines in the past that aren't easily evolved so try to avoid this now.

Arrgh! This is driving me nuts! My idea was to be able to move the sprite in blocks of say 8 pixels, but smoothly.

Can anyone see where I'm going wrong?

Code: Select all

InitSprite()

UsePNGImageDecoder()
InitKeyboard()
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)

OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0, 1)

Structure Sprites
  Dir.i
  PosX.i
  PosY.i
  Frame.i
  MaxFrame.i
  PowUp.i
  id.l
  delay.i
EndStructure

Global NewList Ply1.Sprites() : start = 0

Procedure SetupSprites()
  
  With Ply1()
    For a= 0 To 7
      AddElement(Ply1())
      \Dir=0
      \PosX=10
      \PosY=10
      \Frame=ListSize(Ply1())
      \MaxFrame=5
      \PowUp=0
      \delay=15
      CatchSprite(a,?P1Sprite,#PB_Sprite_PixelCollision)  
      ClipSprite(a,a*25,0,24,40)
    Next
  EndWith
  
  FirstElement(Ply1())
  
EndProcedure

Procedure ShowPlayer(x,y)
  
  Static sprite_timer, start , steps , maxframe
  ;Shared x
  
  If Ply1()\Dir
    
    sprite_timer-1
    
    
    
    If sprite_timer=<0
      ; Debug "Pulse"
      sprite_timer=1*5
      
      start+1
      
      NextElement(Ply1())     
      
      
      If start=>maxframe
        
        If maxframe=2
          SelectElement(Ply1(),0)
          start=0 : maxframe=Ply1()\MaxFrame
        ElseIf maxframe=5
          SelectElement(Ply1(),3)
          start=3 : maxframe=Ply1()\MaxFrame
        Else
          maxframe=2
        EndIf
        
      EndIf
      
      Ply1()\Dir=0
      
    EndIf
    
  EndIf
  
  
  Ply1()\PosY=y
  Ply1()\Posx=x
  Debug start
  
  DisplayTransparentSprite(maxframe-start,x+steps,y)
  
EndProcedure

SetupSprites()

Repeat
  
  Event = WindowEvent()
  ExamineKeyboard()
  FlipBuffers()
  ClearScreen(0)
  
  ;
  
  For a = 0 To 5
    DisplayTransparentSprite(a,100+(a*60),100)
  Next
  
  
  If KeyboardPushed(#PB_Key_Left)
    ;     Y + #Speed
    X-2 : ply1()\dir=1 : Ply1()\MaxFrame=2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    ;     Y - #Speed
    x+2 : ply1()\dir=1 : Ply1()\MaxFrame=5 
  ElseIf KeyboardPushed(#PB_Key_Up)
    y-2 : Ply1()\dir=1 : Ply1()\MaxFrame=2 
    ;     DirX=1
  ElseIf KeyboardPushed(#PB_Key_Down)
    y+2 : ply1()\dir=1 :Ply1()\MaxFrame=5
    ;     DirX=-1
  EndIf
  ;   
  ;   
  
  ShowPlayer(50+X,50+Y)
  
  
Until KeyboardPushed(#PB_Key_Escape) Or Event = #PB_Event_CloseWindow

DataSection
  
  P1Sprite:
  ; size : 4563 bytes
  Data.q $0A1A0A0D474E5089,$524448490D000000,$28000000A0000000,$F12C790000000608,$4752730100000098
  Data.q $0000E91CCEAE0042,$0000414D41670400,$00000561FC0B8FB1,$0000735948700900,$C701C30E0000C30E
  Data.q $741A00000064A86F,$7774666F53745845,$6E69615000657261,$33762054454E2E74,$72F43030312E352E
  Data.q $41444942110000A1,$54787B9BED5E7854,$CA00923727C69DF5,$04817211014B5C2D,$4049B90481770902
  Data.q $DD4FA155A8B30165,$709ADA2DD14B9155,$29F71562D97A9013,$BAD3EDB7AEAD6B4A,$BB20BAAD1F67DBAE
  Data.q $EBBB4FB6B762F75B,$714BBB62DDD9F763,$673F7EEF325B84BD,$84CC99BF26672672,$CE7379E793B47F30
  Data.q $FBE7BF7DEFCE77EF,$A3F642184CE667BE,$CB6B7A4190EF7054,$E2CF1E738E97953C,$75C064F78E781777
  Data.q $5572628C9CE13CFC,$853EDED7CAF67695,$2F0CB78A2EB9BA3A,$E7B83BA6B9DB3ADF,$667D32E9B23A3EE2
  Data.q $74A6429EF1E750F8,$53DE3AE9A1681A00,$CF41C78B783A10B8,$DD35AE13205900C9,$2593314545454844
  Data.q $F4DE6894949562A1,$CC2EED40F47D7D1A,$50310AC181603BB7,$7DB6FB23EA5B5BD8,$62FD7EBF666222A4
  Data.q $2AED3ABA82C15278,$AB96BBADFC06702C,$B5CE65656546A6A6,$B80E16B0EB42E0E9,$E9B5AE0D4DA1C65C
  Data.q $D065E1DEF8E942E0,$2CBC0B07DBC34F5B,$904AC84641B20990,$34111420294B3E27,$87354CC37D7FB621
  Data.q $C3647473A989E866,$CA8B73D5CDCCED3C,$DB9FB610BCC763BD,$3F29ABD73747D17E,$DE39393909DC45CF
  Data.q $29F9F9F948A85076,$455D6F70E560FC07,$8E84C8575F0C4545,$A38CC95C836B2E7F,$D5F3864AE78B6A26
  Data.q $834F12F015DF7BF1,$04C8164F7BE3A31E,$3578CC85642320D9,$FE90824DE2EB9FB5,$6FA45C5DF6AA71AA
  Data.q $CA23376E47567ED5,$BD405679C695EB66,$618A4691A261A2FE,$E6F5EBC2EF31C88C,$D8769D637475732D
  Data.q $FAB91734DA6D33DD,$D2E7CAF714C5E614,$8E94CF018A73780F,$D68C6A38D74DAC0B,$07427A3C6F175B61
  Data.q $8A78978878DC5C4F,$D848AD11D78C78B7,$B211931B099782C9,$2E4B22190EC86642,$3D62DF48690824EE
  Data.q $BCCED5AD8ADC365A,$E2798E887CAC7A61,$EF7D818453085176,$F60757D3AA0AF36E,$D8E94A6BDF263BB6
  Data.q $AF9F6343A1D251B1,$53570C87BBE037CE,$E672882DCFCA55CD,$C13A53201A83935A,$B8DA7B6B0D65CE39
  Data.q $C4BC43C2BD04E84C,$F5EE42CAF48DBC53,$836467BDA34DEF0D,$10C876433215908C,$F8CEC880A7F20A59
  Data.q $7D7D42E87BB4A311,$15976815153552CE,$A2A4BF3D5F4940F2,$66BCC561BD7AB8DD,$F11A10AF7CF37D78
  Data.q $EF59FD5C3AA5F9CD,$AB6BB3D26C0E4FF8,$78EBC82A19DAF2F5,$F013E70B6F601FC9,$5129F2E6EBFAFD1D
  Data.q $C3583C4E94C844BE,$41DC5DDA8E31F3DA,$E19E15E11E0EB4F4,$2E16F14F12F0EB1D,$205938E7BC73C6BC
  Data.q $433215908C836413,$31D114DEB050C876,$2A576586A69DADA8,$ED64E540E1E6DA54,$9AF750B7DEDD8BB4
  Data.q $C45DF61E85DEDED0,$767DD62FF7F697B6,$76914FAFBBF0F157,$34ED3C82AED3CAF5,$427D44507C64B13C
  Data.q $7F383A95B8DAFAF9,$63D5E3F80CD39AA9,$CB3FE3C7A97472B4,$A4CE636741A67A24,$EA9BABC69BAF3AA4
  Data.q $C63F89D3DD4DC3F4,$B40D1B838D06D61A,$352B52351B51C65C,$4055D3A2A47DF907,$784783AF1F7A1D7C
  Data.q $A789788787786785,$032023AF11C78B78,$64273F0D904C8164,$C4EC40D3B904EC86,$B585778DAFDED775
  Data.q $7BAB3D1CF6B0C1F7,$CDA9396EBBAD38DF,$E0F5DB84DB688F95,$CCF42B9AFCF52BC2,$393D32FCBE3D1AC2
  Data.q $4DF6B476B37D12EB,$59AF59355CBFA05B,$1C5F872A73588FD3,$AF2BA59ACD660BC3,$FC7A66AAFBE03F4C
  Data.q $BD0D96A9729C1C41,$51EEAEAEA80693A8,$C79FC5CC9A37209D,$F20D6A46A38D74DA,$4781AF1F7A1D285F
  Data.q $E25E3F0778678578,$DE39E35E31E2DE29,$1906C82640B20193,$040D3B9E26642B21,$7F457960ADCABD06
  Data.q $9FB3A5870AD3B5F9,$972DD6AB49FC29B4,$585FFF8EB0B7FA5E,$6D16C9F7FD287DEF,$8AB1FA2E5553FEBE
  Data.q $9B0DFD775BCBFECA,$CC27792098CC6634,$CD17FEAD16B3785B,$C05A91BD769CF65D,$BA3EA0376CADAD1F
  Data.q $C4F2E67A69EAEE7D,$687BC827527B569F,$D65B0E782E6F28E6,$51B51350B51C62A6,$3A132DAE083B9063
  Data.q $4F12F10F0EF0CF00,$9EF1CF1AF18F16F1,$320D96132F05900C,$B838EC8665B90912,$8DD91F6390604053
  Data.q $A3FB7E7D59C27F30,$8DFF1C4E8964B25A,$B0DADDF6F77C41F8,$19D1F4A9F37E8361,$E1539C15848DD6E9
  Data.q $00792F7E4772B0C4,$6F010A54F57F0183,$8CE4A6BDB7FCE951,$A0A0BCE1E1E5153F,$E8FBF2C7FB032540
  Data.q $5CC8FCAF77209D61,$5C070B586B0203F0,$D71C657535671A5D,$87877867801D0996,$8D78C78B78F9C978
  Data.q $6C82643F3F0F78E7,$071D9069E2B21190,$82FC988C18E80A77,$B9AD2E58555B4A72,$7F5FA39ECF668F6D
  Data.q $AF89E93C9E4E81F0,$DABB70DC6D6AEABC,$B9B26EE2B43EE2EC,$1A542E52DCA5D309,$FC068C01E4E3F530
  Data.q $65403426A7015A4C,$70E90C883B9BA565,$8CEE33D36B3E7F8E,$3C1D685DC62A6357,$C5BC53C0D1783BC3
  Data.q $2C9F87BC73C6BC63,$350AC84641B20990,$4C18E80A77171D91,$4B35AC22A8AB0869,$B6DCFA43BD6D4623
  Data.q $48D6EBC67DB6AD36,$B7AD2F59AE936FF3,$801445D4160D8DF1,$C7E3587D77556781,$779AFEA208F87EC7
  Data.q $3C066ECB57B62EEC,$E4E61B0D86B8F4BF,$ACEA920FDE7CA20E,$39C3A03DFF0F6159,$671A12B438CC9B9C
  Data.q $7454883B8BAB5235,$1B8BBDE874C40692,$29E25E21E1DE19E0,$C3DE39E35E31E2DE,$697AF0D904C8164F
  Data.q $029DC5C764332159,$B282A6D1DCB7063A,$79715F9088CD5556,$2F1BD82EDCA195E4,$A4734B4B563718EC
  Data.q $52F3C772E64697DE,$831E483AB398CD2C,$DBAE7E55EAC2ABE9,$7797952BF45F2F01,$D4275FFCC971ACFD
  Data.q $DC3D2C3694FCBF59,$438CC9B9C39C3A23,$2EAD48D471974D0B,$74101649D15220EE,$AF199E781B8BBDE8
  Data.q $35E31E2DE29E21EF,$60D96C745F0F7873,$A77171D90CC8564C,$4B5CBC29E0C18E80,$D09B960E40D776C5
  Data.q $6BC17615E2D2C59A,$B00AD8BE2F1B06A5,$B007B7C6F21B1702,$920C6AAD2A483B8C,$4D68B6F63D8EE0C7
  Data.q $167ADFDBF3C04EEC,$1B3310772779FE5C,$4D604E778E88CCDE,$83B8BAB52351C6BA,$9E06E2EF7A1D09E8
  Data.q $D6F14F10F7C6B667,$0327BC73C6BCD8F3,$6B0AC80DC04C8164,$60C74053B838ECBC,$E356765395BBBCE6
  Data.q $07908C4DFBC846A6,$3E2EAB83C5C81DC1,$C6EEC0B55B0FD6A3,$EF76FD5FABD8268B,$B561819DBFAE0ACF
  Data.q $1D8D61A1A8F80FDD,$12F946F66BD36F64,$24EA8F47FE4684E9,$1DDB586B2E70E702,$EB6BC1DC1D5ABCE3
  Data.q $E81F7E01F7AF1D09,$29E25E21E1DE19E0,$416219DE473EFADE,$B8EC86642B27E036,$5EB66280C74053F8
  Data.q $E0CA359DD986B6FB,$F21A18170AC59589,$86F3B477FA85F55B,$1DEA9AADA3E3F53B,$413CA23B8DD5D36B
  Data.q $02B77F60FECB1F5E,$15AC20438D9E70BE,$6133A44B015F1DB5,$A564B0D3ADE7ADCA,$B0D65CE1CE083B93
  Data.q $783B8BAB51C63BB6,$20FBD0EAF9F35C6D,$C43CCEF3C75F0FBF,$3C6BC63C5BC53C4B,$2B211904CF6FE18F
  Data.q $3063A02917912664,$0698683FBD0AD2FF,$29B5B77076DB4956,$E2EAEB0E8E8684CF,$3D379AA2F1DA6A13
  Data.q $B44F2748FEAB7DA0,$4AFD3FAAD97F7FEA,$D71F6B6339D8069B,$1838901C4D0AB296,$3B4DBFC686E33B7C
  Data.q $1457F34FDDD997E0,$DB4DFA078DE4E7BE,$E4E3FF253AFBB3FE,$8D74DAC359738175,$ABBBDAE38D54C6A3
  Data.q $3C7D178BBDE9CF43,$5BC53C4BC43C3BC3,$40327BC73C6BC63C,$85642320D904C816,$18E80A7F171D90CC
  Data.q $07E57D6A0BEEBE9C,$18DCB6ABFCDFD5FA,$7EF17E9B70FE7911,$7BFE6A53CBF27E9B,$AB64E5AA6F53F0E9
  Data.q $DDB2FDBE9B58EEFE,$1EA36B3D55873561,$05C3C71B0F53BD1F,$EEE907FF27171521,$172E4E2398EA7C04
  Data.q $EF7AFAFAAB9DCEE6,$C74C17CDCDCD124F,$A1F89A8E31D26B07,$8EAE90BA71756A46,$33C2BC0F9717101F
  Data.q $C5BC53C4BC43C3BC,$640327BC73C6BC63,$990AC8464FC04C81,$F9D91014FE2E3B21,$6AC38DFE3A2190C5
  Data.q $ADD4D97E9D69FA7B,$3E6BFAD55E333DB0,$694AFD6ACEABBAD4,$7DA33AAFD68B5353,$67D40FE6FDB45A9B
  Data.q $1F3F58FB8F069B42,$0FF0D671C6C29970,$7ED7337F127D0186,$E8E6B25FE0374879,$B4F1966B3F55DFBB
  Data.q $EF20D0683106F3C4,$F8BA59D1D27FF6CE,$CFF0A49D768E3DCF,$48D43FF9C63A4D61,$6B87416871BCF1AD
  Data.q $383C08C406E907A7,$1E1DE19E15E03D78,$35E31E2DE29E25E2,$582CBC065BDE7B9E,$86642B211906C826
  Data.q $EC881746972190EC,$A0381F4E806037DC,$BA46E375A90E8773,$3CD48555341E2D13,$F5D6A8BE2FAD4735
  Data.q $8FF7FB86E766D5EB,$D0D6ED8673F8A71E,$1E424EA9B7CFE68F,$06A9B15BEF8797EC,$ADA6B68394D667FC
  Data.q $E78DBF3C236B50B0,$CE80A6F715FF064D,$D13FE3253AB1D5BA,$4F3724C6A7BF7BFD,$438D0470B586B022
  Data.q $1C915E54ED0E37C3,$7A03D3B5CCD72DF8,$707811B1E8406A91,$3C3BC33C2BC07AF0,$8D78C78B780F49B4
  Data.q $2C1EE3FC064F78E7,$E4321D90CC856423,$7878666CF602E8D2,$06C36E74AFDE02C1,$32EC06298DF6FB85
  Data.q $5E97D9D34D1777F1,$14D4DAD4EB75D9D2,$41B0F9FC057FDC73,$0C59D53615BACEFA,$1F03ACC44623659D
  Data.q $C84EABAF7FADEEF5,$1FB8DF78653866DD,$838EE6754DB969B9,$5106C4358F69092D,$6C0CEBF6D2761A0D
  Data.q $FFD3F6328D0063FD,$44D870B586B7B94A,$7ED0D5EDA65A3114,$0326B57BD7DADA8C,$7A0D7883D3B5CCD7
  Data.q $F86A0C3D1DE8CF45,$78578DC5DEF4E7A0,$6E411464DA02BFE6,$564F9CE3C10327BC,$9274894321D90CC8
  Data.q $3BB2AA797971A420,$011189EE7BB6920C,$4FA42537EAF6B92D,$6D527C9EE7417C5F,$7C319C162A76B75B
  Data.q $BFFEED9F6D46C6F5,$70620DADB68CE821,$A4B9E17E9D2F57B2,$76E02537700DA7DC,$ED834078ED8316E1
  Data.q $A57883E6051F8643,$5D15FB064AE2EB7D,$01AFDF64D0B40F1B,$6B99AE05CB8B9B50,$CF457A03113607A7
  Data.q $E7A0F86A0C3D1DE8,$9DE370578DC5DEF4,$8064F78DC820C44D,$43B2C665E79FC42C,$8685484124E91286
  Data.q $0D0DC2A363708631,$6D487B54D340049D,$33AD76BA425BA7B0,$769468BCDE262D24,$0D8EA0E22DFCED4C
  Data.q $DC8A44F69AC27062,$3B60D5B85DB809CD,$0B830FC895E0D01E,$1C66252B0E01C1BE,$07C38672FD98F444
  Data.q $016D473F8353689A,$607A76B99AE0A4AE,$77A33D6242F03113,$7BD39E83E1A830F4,$64F78DC2A55E3717
  Data.q $D90CCB3CEF1CFE20,$DBD9E5210493A649,$4E3360CD7DB64DC3,$EAEEF58A6B07FC90,$EDE73CE91C8F0AC5
  Data.q $D62FADECCD354ACA,$5E36C3AFA02EFE76,$5F39343D3AF4CCE7,$0A9E7B6150B55D3F,$CDA3EEE3D471F31E
  Data.q $B06CD0BA00EFEEB5,$5B4FDBEDEC680F1D,$B671C78B9FD2EDED,$C6B6802D4BCFDFB1,$FE0D4DA268009B5B
  Data.q $E66B8292B805B51C,$A33D02744D81E9DA,$1C35E801A830F477,$7786785781E3EF7E,$EF78E78D7809D136
  Data.q $A44A190E81F3F57A,$8FDBED519D910493,$3B9E0784D81F240C,$FA218CD4F57372DA,$879DA5A0F52349A7
  Data.q $B48AD3ED8FB8FF56,$3D3DF24FDF4726BD,$E8562B481B00E81F,$9DD315DF691749A9,$7FFA995FDEE7C0BC
  Data.q $4AAAA86A086FDE8E,$E1AAF1A84C4E264B,$89CF0C6ED9B76DFD,$06D6B0D639A771B8,$D8357B689A16809D
  Data.q $5C0C91C82DA89A98,$D013A26C0F4ED733,$7C5C01A830F477A0,$1AF1786E2255E041,$FD419F040C9EF1CF
  Data.q $6444D2867E3AF89C,$433DFF7DB9B0C727,$C769688A530781AB,$DA8581A5E9177ACF,$F6C7FE3699AE5E5C
  Data.q $48FD5AF8CEEDA7E3,$CA01BAA1EAE6D735,$7B23F0C2782EE34D,$184EB697A8A77D90,$E7C1B1F4DCF2F1ED
  Data.q $E9D5E81FAEE7C87E,$C313FFD81051F1E2,$BC681C60E8F671DA,$57D7F726BBAC5C59,$D4F8D11F963A43AA
  Data.q $986CFF896F0353F0,$AE080F8F9070763E,$1C2D61ACF331090F,$89A1681A3709C170,$BF9B51350B503536
  Data.q $1ED7335C0BB3583E,$0D06F427AF48C1E9,$83443D1DE8CF457A,$833C2BC05C78BA9E,$AF1785BC6E7D0F1B
  Data.q $6C9C701CFDEF1CF1,$CAE9D90F02B21190,$5E78191418E8049B,$CF13ED7BA438BFB9,$33D2141F5E90B281
  Data.q $527BBA432BFBB0D6,$B65F0D0FF8EDFD48,$3FCDAF6099EDBBFD,$39AACCF4EAF23D30,$0094F24181D8D6FA
  Data.q $0E4BE1B1FEF0DC27,$7F5D11CEFB8DA7EE,$D5BB70D721360900,$75D2125B99E345FF,$8D3BA43A383A4363
  Data.q $9755AEBB5AE18B7F,$88F6FA42BD87F484,$367B0EDB58133E90,$E16B18E623E734EF,$4D0B40D1B84E0B80
  Data.q $FCDA89A85A81A9B4,$7A03D3B5C718A9B5,$F457A23D0DE84F41,$0327D6B8FEF9DE8C,$EBC31E373C5DE19E
  Data.q $1B209902C80643FB,$E2E3B21990AC8464,$AFEE0CB7279D014E,$86C00F3273BE46FD,$44266BCB9087C89A
  Data.q $CF2B1E926F3439CF,$D2189EED2115C3D1,$2027FE9054FDD5B3,$50D2B1E9E4950E27,$A1565D9EAE527B84
  Data.q $7C850C9494FF0482,$1DD8D61DA39FEB2A,$2A4D1CE4E7739CF6,$2367FE9DDA4F44BD,$6BEDDE909F5F75F3
  Data.q $BCF243B5513C5E4D,$F46ECC69FE071F6F,$6B0D61CEF0719CCE,$0B40D1B84E0B80E1,$DA89A85A81A9B44D
  Data.q $F417A03D04BAB8E2,$373AE57A23D0DE84,$6DC7A5E21E1DE05D,$00C9EF1C7FB1E2DE,$95908C8364132059
  Data.q $409DFC9CE0374F20,$F3198E0ED4514C20,$6382C7F1FBF80241,$A7163D1B61AD1217,$939C29EFDB55C1E9
  Data.q $C8B3273829916459,$A64591664E705322,$39C14C8B22CC9CE0,$8B32738299164599,$64591664E705322C
  Data.q $9C14C8B22CC9CE0A,$B327382991645993,$5D01FFE9080322C8,$001C5B2574A2EFA6,$AE444E4549000000
  Data.b $42,$60,$82
  P1Sprite_end:
EndDataSection

----

R Tape loading error, 0:1
User avatar
DK_PETER
Addict
Addict
Posts: 898
Joined: Sat Feb 19, 2011 10:06 am
Location: Denmark
Contact:

Re: How to handle sprite direction

Post by DK_PETER »

Hi
1. Your ply1\Dir(s) are all equal to one.
2. Since you use OpenWindowedScreen - Remember to handle all window events.

Code: Select all

   repeat
      repeat
         event = WindowEvent()
         ;do whatever
      until event = 0
     ClearScreen(0)
     ; do your screen stuff

     flipbuffers()  
   until KeyboardPushed(#PB_Key_Escape)
I've changed your code to fullscreen and reworked (simplified) it below.
Can't test the code as I'm sitting at a pc without PB installed. ( Hope it works as expected).

Code: Select all

InitSprite()
UsePNGImageDecoder()
InitKeyboard()

Global Img.i

OpenScreen(800, 600, 32, "Test", #PB_Screen_SmartSynchronization, 60)

Structure Sprite_Data
  x.i
  y.i
  dir.i
  List id.i()
  left.i
  right.i
EndStructure

Global Ply.Sprite_Data

Procedure SetupSprites()
  Protected Img2.i, p.i, w.i, h.i 
  ;facing left is element 0
  ;facing right is element 5

  Img = CatchImage(#PB_Any,?P1Sprite,4563)
  w = ImageWidth(Img)-1
  h = ImageHeight(Img)-1
  p = Int(w / 6)
  
  For x = 0 To 5   ;There are 6 sprites in sheet
    AddElement(Ply\id())
    Ply\id() = CreateSprite(#PB_Any,24,40,#PB_Sprite_PixelCollision)
    If IsImage(Img2)
      FreeImage(Img2)
    EndIf
    Img2 = GrabImage(Img,#PB_Any,x * p, 0, p, h)
    StartDrawing(SpriteOutput(ply\id()))
    DrawImage(ImageID(Img2),0,0)
    StopDrawing()
  Next x

  ; Set base position for sprite
  ply\x = ScreenWidth()/2
  Ply\y = ScreenHeight()/2
  ply\left = 0
  ply\right = 5
  SelectElement(ply\id(),0)
  If IsImage(Img2)
    FreeImage(Img2)
  EndIf
EndProcedure


SetupSprites()

Repeat

  ClearScreen(0)
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Left)
    Ply\x - 2
    If (ply\left + 1) = 3
      ply\left = 0
    Else
      ply\left + 1
    EndIf
    SelectElement(ply\id(),ply\left)
  EndIf
  
  If KeyboardPushed(#PB_Key_Right)
    Ply\x + 2
    If (ply\right + 1) > 5
      ply\right = 3
    Else
      ply\right + 1
    EndIf
    SelectElement(ply\id(),ply\right)
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    Ply\y - 2
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    ply\y + 2
  EndIf
  
  DisplayTransparentSprite(Ply\id(), Ply\x, Ply\y)
  
  FlipBuffers()
 
Until KeyboardPushed(#PB_Key_Escape)



DataSection
 
  P1Sprite:
  ; size : 4563 bytes
  Data.q $0A1A0A0D474E5089,$524448490D000000,$28000000A0000000,$F12C790000000608,$4752730100000098
  Data.q $0000E91CCEAE0042,$0000414D41670400,$00000561FC0B8FB1,$0000735948700900,$C701C30E0000C30E
  Data.q $741A00000064A86F,$7774666F53745845,$6E69615000657261,$33762054454E2E74,$72F43030312E352E
  Data.q $41444942110000A1,$54787B9BED5E7854,$CA00923727C69DF5,$04817211014B5C2D,$4049B90481770902
  Data.q $DD4FA155A8B30165,$709ADA2DD14B9155,$29F71562D97A9013,$BAD3EDB7AEAD6B4A,$BB20BAAD1F67DBAE
  Data.q $EBBB4FB6B762F75B,$714BBB62DDD9F763,$673F7EEF325B84BD,$84CC99BF26672672,$CE7379E793B47F30
  Data.q $FBE7BF7DEFCE77EF,$A3F642184CE667BE,$CB6B7A4190EF7054,$E2CF1E738E97953C,$75C064F78E781777
  Data.q $5572628C9CE13CFC,$853EDED7CAF67695,$2F0CB78A2EB9BA3A,$E7B83BA6B9DB3ADF,$667D32E9B23A3EE2
  Data.q $74A6429EF1E750F8,$53DE3AE9A1681A00,$CF41C78B783A10B8,$DD35AE13205900C9,$2593314545454844
  Data.q $F4DE6894949562A1,$CC2EED40F47D7D1A,$50310AC181603BB7,$7DB6FB23EA5B5BD8,$62FD7EBF666222A4
  Data.q $2AED3ABA82C15278,$AB96BBADFC06702C,$B5CE65656546A6A6,$B80E16B0EB42E0E9,$E9B5AE0D4DA1C65C
  Data.q $D065E1DEF8E942E0,$2CBC0B07DBC34F5B,$904AC84641B20990,$34111420294B3E27,$87354CC37D7FB621
  Data.q $C3647473A989E866,$CA8B73D5CDCCED3C,$DB9FB610BCC763BD,$3F29ABD73747D17E,$DE39393909DC45CF
  Data.q $29F9F9F948A85076,$455D6F70E560FC07,$8E84C8575F0C4545,$A38CC95C836B2E7F,$D5F3864AE78B6A26
  Data.q $834F12F015DF7BF1,$04C8164F7BE3A31E,$3578CC85642320D9,$FE90824DE2EB9FB5,$6FA45C5DF6AA71AA
  Data.q $CA23376E47567ED5,$BD405679C695EB66,$618A4691A261A2FE,$E6F5EBC2EF31C88C,$D8769D637475732D
  Data.q $FAB91734DA6D33DD,$D2E7CAF714C5E614,$8E94CF018A73780F,$D68C6A38D74DAC0B,$07427A3C6F175B61
  Data.q $8A78978878DC5C4F,$D848AD11D78C78B7,$B211931B099782C9,$2E4B22190EC86642,$3D62DF48690824EE
  Data.q $BCCED5AD8ADC365A,$E2798E887CAC7A61,$EF7D818453085176,$F60757D3AA0AF36E,$D8E94A6BDF263BB6
  Data.q $AF9F6343A1D251B1,$53570C87BBE037CE,$E672882DCFCA55CD,$C13A53201A83935A,$B8DA7B6B0D65CE39
  Data.q $C4BC43C2BD04E84C,$F5EE42CAF48DBC53,$836467BDA34DEF0D,$10C876433215908C,$F8CEC880A7F20A59
  Data.q $7D7D42E87BB4A311,$15976815153552CE,$A2A4BF3D5F4940F2,$66BCC561BD7AB8DD,$F11A10AF7CF37D78
  Data.q $EF59FD5C3AA5F9CD,$AB6BB3D26C0E4FF8,$78EBC82A19DAF2F5,$F013E70B6F601FC9,$5129F2E6EBFAFD1D
  Data.q $C3583C4E94C844BE,$41DC5DDA8E31F3DA,$E19E15E11E0EB4F4,$2E16F14F12F0EB1D,$205938E7BC73C6BC
  Data.q $433215908C836413,$31D114DEB050C876,$2A576586A69DADA8,$ED64E540E1E6DA54,$9AF750B7DEDD8BB4
  Data.q $C45DF61E85DEDED0,$767DD62FF7F697B6,$76914FAFBBF0F157,$34ED3C82AED3CAF5,$427D44507C64B13C
  Data.q $7F383A95B8DAFAF9,$63D5E3F80CD39AA9,$CB3FE3C7A97472B4,$A4CE636741A67A24,$EA9BABC69BAF3AA4
  Data.q $C63F89D3DD4DC3F4,$B40D1B838D06D61A,$352B52351B51C65C,$4055D3A2A47DF907,$784783AF1F7A1D7C
  Data.q $A789788787786785,$032023AF11C78B78,$64273F0D904C8164,$C4EC40D3B904EC86,$B585778DAFDED775
  Data.q $7BAB3D1CF6B0C1F7,$CDA9396EBBAD38DF,$E0F5DB84DB688F95,$CCF42B9AFCF52BC2,$393D32FCBE3D1AC2
  Data.q $4DF6B476B37D12EB,$59AF59355CBFA05B,$1C5F872A73588FD3,$AF2BA59ACD660BC3,$FC7A66AAFBE03F4C
  Data.q $BD0D96A9729C1C41,$51EEAEAEA80693A8,$C79FC5CC9A37209D,$F20D6A46A38D74DA,$4781AF1F7A1D285F
  Data.q $E25E3F0778678578,$DE39E35E31E2DE29,$1906C82640B20193,$040D3B9E26642B21,$7F457960ADCABD06
  Data.q $9FB3A5870AD3B5F9,$972DD6AB49FC29B4,$585FFF8EB0B7FA5E,$6D16C9F7FD287DEF,$8AB1FA2E5553FEBE
  Data.q $9B0DFD775BCBFECA,$CC27792098CC6634,$CD17FEAD16B3785B,$C05A91BD769CF65D,$BA3EA0376CADAD1F
  Data.q $C4F2E67A69EAEE7D,$687BC827527B569F,$D65B0E782E6F28E6,$51B51350B51C62A6,$3A132DAE083B9063
  Data.q $4F12F10F0EF0CF00,$9EF1CF1AF18F16F1,$320D96132F05900C,$B838EC8665B90912,$8DD91F6390604053
  Data.q $A3FB7E7D59C27F30,$8DFF1C4E8964B25A,$B0DADDF6F77C41F8,$19D1F4A9F37E8361,$E1539C15848DD6E9
  Data.q $00792F7E4772B0C4,$6F010A54F57F0183,$8CE4A6BDB7FCE951,$A0A0BCE1E1E5153F,$E8FBF2C7FB032540
  Data.q $5CC8FCAF77209D61,$5C070B586B0203F0,$D71C657535671A5D,$87877867801D0996,$8D78C78B78F9C978
  Data.q $6C82643F3F0F78E7,$071D9069E2B21190,$82FC988C18E80A77,$B9AD2E58555B4A72,$7F5FA39ECF668F6D
  Data.q $AF89E93C9E4E81F0,$DABB70DC6D6AEABC,$B9B26EE2B43EE2EC,$1A542E52DCA5D309,$FC068C01E4E3F530
  Data.q $65403426A7015A4C,$70E90C883B9BA565,$8CEE33D36B3E7F8E,$3C1D685DC62A6357,$C5BC53C0D1783BC3
  Data.q $2C9F87BC73C6BC63,$350AC84641B20990,$4C18E80A77171D91,$4B35AC22A8AB0869,$B6DCFA43BD6D4623
  Data.q $48D6EBC67DB6AD36,$B7AD2F59AE936FF3,$801445D4160D8DF1,$C7E3587D77556781,$779AFEA208F87EC7
  Data.q $3C066ECB57B62EEC,$E4E61B0D86B8F4BF,$ACEA920FDE7CA20E,$39C3A03DFF0F6159,$671A12B438CC9B9C
  Data.q $7454883B8BAB5235,$1B8BBDE874C40692,$29E25E21E1DE19E0,$C3DE39E35E31E2DE,$697AF0D904C8164F
  Data.q $029DC5C764332159,$B282A6D1DCB7063A,$79715F9088CD5556,$2F1BD82EDCA195E4,$A4734B4B563718EC
  Data.q $52F3C772E64697DE,$831E483AB398CD2C,$DBAE7E55EAC2ABE9,$7797952BF45F2F01,$D4275FFCC971ACFD
  Data.q $DC3D2C3694FCBF59,$438CC9B9C39C3A23,$2EAD48D471974D0B,$74101649D15220EE,$AF199E781B8BBDE8
  Data.q $35E31E2DE29E21EF,$60D96C745F0F7873,$A77171D90CC8564C,$4B5CBC29E0C18E80,$D09B960E40D776C5
  Data.q $6BC17615E2D2C59A,$B00AD8BE2F1B06A5,$B007B7C6F21B1702,$920C6AAD2A483B8C,$4D68B6F63D8EE0C7
  Data.q $167ADFDBF3C04EEC,$1B3310772779FE5C,$4D604E778E88CCDE,$83B8BAB52351C6BA,$9E06E2EF7A1D09E8
  Data.q $D6F14F10F7C6B667,$0327BC73C6BCD8F3,$6B0AC80DC04C8164,$60C74053B838ECBC,$E356765395BBBCE6
  Data.q $07908C4DFBC846A6,$3E2EAB83C5C81DC1,$C6EEC0B55B0FD6A3,$EF76FD5FABD8268B,$B561819DBFAE0ACF
  Data.q $1D8D61A1A8F80FDD,$12F946F66BD36F64,$24EA8F47FE4684E9,$1DDB586B2E70E702,$EB6BC1DC1D5ABCE3
  Data.q $E81F7E01F7AF1D09,$29E25E21E1DE19E0,$416219DE473EFADE,$B8EC86642B27E036,$5EB66280C74053F8
  Data.q $E0CA359DD986B6FB,$F21A18170AC59589,$86F3B477FA85F55B,$1DEA9AADA3E3F53B,$413CA23B8DD5D36B
  Data.q $02B77F60FECB1F5E,$15AC20438D9E70BE,$6133A44B015F1DB5,$A564B0D3ADE7ADCA,$B0D65CE1CE083B93
  Data.q $783B8BAB51C63BB6,$20FBD0EAF9F35C6D,$C43CCEF3C75F0FBF,$3C6BC63C5BC53C4B,$2B211904CF6FE18F
  Data.q $3063A02917912664,$0698683FBD0AD2FF,$29B5B77076DB4956,$E2EAEB0E8E8684CF,$3D379AA2F1DA6A13
  Data.q $B44F2748FEAB7DA0,$4AFD3FAAD97F7FEA,$D71F6B6339D8069B,$1838901C4D0AB296,$3B4DBFC686E33B7C
  Data.q $1457F34FDDD997E0,$DB4DFA078DE4E7BE,$E4E3FF253AFBB3FE,$8D74DAC359738175,$ABBBDAE38D54C6A3
  Data.q $3C7D178BBDE9CF43,$5BC53C4BC43C3BC3,$40327BC73C6BC63C,$85642320D904C816,$18E80A7F171D90CC
  Data.q $07E57D6A0BEEBE9C,$18DCB6ABFCDFD5FA,$7EF17E9B70FE7911,$7BFE6A53CBF27E9B,$AB64E5AA6F53F0E9
  Data.q $DDB2FDBE9B58EEFE,$1EA36B3D55873561,$05C3C71B0F53BD1F,$EEE907FF27171521,$172E4E2398EA7C04
  Data.q $EF7AFAFAAB9DCEE6,$C74C17CDCDCD124F,$A1F89A8E31D26B07,$8EAE90BA71756A46,$33C2BC0F9717101F
  Data.q $C5BC53C4BC43C3BC,$640327BC73C6BC63,$990AC8464FC04C81,$F9D91014FE2E3B21,$6AC38DFE3A2190C5
  Data.q $ADD4D97E9D69FA7B,$3E6BFAD55E333DB0,$694AFD6ACEABBAD4,$7DA33AAFD68B5353,$67D40FE6FDB45A9B
  Data.q $1F3F58FB8F069B42,$0FF0D671C6C29970,$7ED7337F127D0186,$E8E6B25FE0374879,$B4F1966B3F55DFBB
  Data.q $EF20D0683106F3C4,$F8BA59D1D27FF6CE,$CFF0A49D768E3DCF,$48D43FF9C63A4D61,$6B87416871BCF1AD
  Data.q $383C08C406E907A7,$1E1DE19E15E03D78,$35E31E2DE29E25E2,$582CBC065BDE7B9E,$86642B211906C826
  Data.q $EC881746972190EC,$A0381F4E806037DC,$BA46E375A90E8773,$3CD48555341E2D13,$F5D6A8BE2FAD4735
  Data.q $8FF7FB86E766D5EB,$D0D6ED8673F8A71E,$1E424EA9B7CFE68F,$06A9B15BEF8797EC,$ADA6B68394D667FC
  Data.q $E78DBF3C236B50B0,$CE80A6F715FF064D,$D13FE3253AB1D5BA,$4F3724C6A7BF7BFD,$438D0470B586B022
  Data.q $1C915E54ED0E37C3,$7A03D3B5CCD72DF8,$707811B1E8406A91,$3C3BC33C2BC07AF0,$8D78C78B780F49B4
  Data.q $2C1EE3FC064F78E7,$E4321D90CC856423,$7878666CF602E8D2,$06C36E74AFDE02C1,$32EC06298DF6FB85
  Data.q $5E97D9D34D1777F1,$14D4DAD4EB75D9D2,$41B0F9FC057FDC73,$0C59D53615BACEFA,$1F03ACC44623659D
  Data.q $C84EABAF7FADEEF5,$1FB8DF78653866DD,$838EE6754DB969B9,$5106C4358F69092D,$6C0CEBF6D2761A0D
  Data.q $FFD3F6328D0063FD,$44D870B586B7B94A,$7ED0D5EDA65A3114,$0326B57BD7DADA8C,$7A0D7883D3B5CCD7
  Data.q $F86A0C3D1DE8CF45,$78578DC5DEF4E7A0,$6E411464DA02BFE6,$564F9CE3C10327BC,$9274894321D90CC8
  Data.q $3BB2AA797971A420,$011189EE7BB6920C,$4FA42537EAF6B92D,$6D527C9EE7417C5F,$7C319C162A76B75B
  Data.q $BFFEED9F6D46C6F5,$70620DADB68CE821,$A4B9E17E9D2F57B2,$76E02537700DA7DC,$ED834078ED8316E1
  Data.q $A57883E6051F8643,$5D15FB064AE2EB7D,$01AFDF64D0B40F1B,$6B99AE05CB8B9B50,$CF457A03113607A7
  Data.q $E7A0F86A0C3D1DE8,$9DE370578DC5DEF4,$8064F78DC820C44D,$43B2C665E79FC42C,$8685484124E91286
  Data.q $0D0DC2A363708631,$6D487B54D340049D,$33AD76BA425BA7B0,$769468BCDE262D24,$0D8EA0E22DFCED4C
  Data.q $DC8A44F69AC27062,$3B60D5B85DB809CD,$0B830FC895E0D01E,$1C66252B0E01C1BE,$07C38672FD98F444
  Data.q $016D473F8353689A,$607A76B99AE0A4AE,$77A33D6242F03113,$7BD39E83E1A830F4,$64F78DC2A55E3717
  Data.q $D90CCB3CEF1CFE20,$DBD9E5210493A649,$4E3360CD7DB64DC3,$EAEEF58A6B07FC90,$EDE73CE91C8F0AC5
  Data.q $D62FADECCD354ACA,$5E36C3AFA02EFE76,$5F39343D3AF4CCE7,$0A9E7B6150B55D3F,$CDA3EEE3D471F31E
  Data.q $B06CD0BA00EFEEB5,$5B4FDBEDEC680F1D,$B671C78B9FD2EDED,$C6B6802D4BCFDFB1,$FE0D4DA268009B5B
  Data.q $E66B8292B805B51C,$A33D02744D81E9DA,$1C35E801A830F477,$7786785781E3EF7E,$EF78E78D7809D136
  Data.q $A44A190E81F3F57A,$8FDBED519D910493,$3B9E0784D81F240C,$FA218CD4F57372DA,$879DA5A0F52349A7
  Data.q $B48AD3ED8FB8FF56,$3D3DF24FDF4726BD,$E8562B481B00E81F,$9DD315DF691749A9,$7FFA995FDEE7C0BC
  Data.q $4AAAA86A086FDE8E,$E1AAF1A84C4E264B,$89CF0C6ED9B76DFD,$06D6B0D639A771B8,$D8357B689A16809D
  Data.q $5C0C91C82DA89A98,$D013A26C0F4ED733,$7C5C01A830F477A0,$1AF1786E2255E041,$FD419F040C9EF1CF
  Data.q $6444D2867E3AF89C,$433DFF7DB9B0C727,$C769688A530781AB,$DA8581A5E9177ACF,$F6C7FE3699AE5E5C
  Data.q $48FD5AF8CEEDA7E3,$CA01BAA1EAE6D735,$7B23F0C2782EE34D,$184EB697A8A77D90,$E7C1B1F4DCF2F1ED
  Data.q $E9D5E81FAEE7C87E,$C313FFD81051F1E2,$BC681C60E8F671DA,$57D7F726BBAC5C59,$D4F8D11F963A43AA
  Data.q $986CFF896F0353F0,$AE080F8F9070763E,$1C2D61ACF331090F,$89A1681A3709C170,$BF9B51350B503536
  Data.q $1ED7335C0BB3583E,$0D06F427AF48C1E9,$83443D1DE8CF457A,$833C2BC05C78BA9E,$AF1785BC6E7D0F1B
  Data.q $6C9C701CFDEF1CF1,$CAE9D90F02B21190,$5E78191418E8049B,$CF13ED7BA438BFB9,$33D2141F5E90B281
  Data.q $527BBA432BFBB0D6,$B65F0D0FF8EDFD48,$3FCDAF6099EDBBFD,$39AACCF4EAF23D30,$0094F24181D8D6FA
  Data.q $0E4BE1B1FEF0DC27,$7F5D11CEFB8DA7EE,$D5BB70D721360900,$75D2125B99E345FF,$8D3BA43A383A4363
  Data.q $9755AEBB5AE18B7F,$88F6FA42BD87F484,$367B0EDB58133E90,$E16B18E623E734EF,$4D0B40D1B84E0B80
  Data.q $FCDA89A85A81A9B4,$7A03D3B5C718A9B5,$F457A23D0DE84F41,$0327D6B8FEF9DE8C,$EBC31E373C5DE19E
  Data.q $1B209902C80643FB,$E2E3B21990AC8464,$AFEE0CB7279D014E,$86C00F3273BE46FD,$44266BCB9087C89A
  Data.q $CF2B1E926F3439CF,$D2189EED2115C3D1,$2027FE9054FDD5B3,$50D2B1E9E4950E27,$A1565D9EAE527B84
  Data.q $7C850C9494FF0482,$1DD8D61DA39FEB2A,$2A4D1CE4E7739CF6,$2367FE9DDA4F44BD,$6BEDDE909F5F75F3
  Data.q $BCF243B5513C5E4D,$F46ECC69FE071F6F,$6B0D61CEF0719CCE,$0B40D1B84E0B80E1,$DA89A85A81A9B44D
  Data.q $F417A03D04BAB8E2,$373AE57A23D0DE84,$6DC7A5E21E1DE05D,$00C9EF1C7FB1E2DE,$95908C8364132059
  Data.q $409DFC9CE0374F20,$F3198E0ED4514C20,$6382C7F1FBF80241,$A7163D1B61AD1217,$939C29EFDB55C1E9
  Data.q $C8B3273829916459,$A64591664E705322,$39C14C8B22CC9CE0,$8B32738299164599,$64591664E705322C
  Data.q $9C14C8B22CC9CE0A,$B327382991645993,$5D01FFE9080322C8,$001C5B2574A2EFA6,$AE444E4549000000
  Data.b $42,$60,$82
  P1Sprite_end:
EndDataSection
Best regards
Peter
Current configurations:
Ubuntu 20.04/64 bit - Window 10 64 bit
Intel 6800K, GeForce Gtx 1060, 32 gb ram.
Amd Ryzen 9 5950X, GeForce 3070, 128 gb ram.
User avatar
em_uk
Enthusiast
Enthusiast
Posts: 366
Joined: Sun Aug 08, 2010 3:32 pm
Location: Manchester UK

Re: How to handle sprite direction

Post by em_uk »

Thanks for the help, I can see where i was going wrong, trying to make something work that wasn't ever going to!

It's not exactly perfect as the frame rate is too high but I can fix that, more impressed you were able to do this without using PB!

:)
----

R Tape loading error, 0:1
Post Reply