From 3feb0558ca805d5e96a0952a740d58801acc2f8d Mon Sep 17 00:00:00 2001 From: Maurice Date: Wed, 26 Nov 2025 21:22:35 +0100 Subject: [PATCH] created moveable player --- assets/player/boy_down_1.png | Bin 0 -> 5968 bytes assets/player/boy_down_2.png | Bin 0 -> 5980 bytes assets/player/boy_left_1.png | Bin 0 -> 6068 bytes assets/player/boy_left_2.png | Bin 0 -> 6011 bytes assets/player/boy_right_1.png | Bin 0 -> 6059 bytes assets/player/boy_right_2.png | Bin 0 -> 5995 bytes assets/player/boy_up_1.png | Bin 0 -> 5863 bytes assets/player/boy_up_2.png | Bin 0 -> 5861 bytes src/de/mp/jgame2d/core/Direction.java | 19 ++++++ src/de/mp/jgame2d/core/GamePanel.java | 19 ++---- src/de/mp/jgame2d/entity/Entity.java | 18 +++++ src/de/mp/jgame2d/entity/Player.java | 91 ++++++++++++++++++++++++++ 12 files changed, 134 insertions(+), 13 deletions(-) create mode 100644 assets/player/boy_down_1.png create mode 100644 assets/player/boy_down_2.png create mode 100644 assets/player/boy_left_1.png create mode 100644 assets/player/boy_left_2.png create mode 100644 assets/player/boy_right_1.png create mode 100644 assets/player/boy_right_2.png create mode 100644 assets/player/boy_up_1.png create mode 100644 assets/player/boy_up_2.png create mode 100644 src/de/mp/jgame2d/core/Direction.java create mode 100644 src/de/mp/jgame2d/entity/Entity.java create mode 100644 src/de/mp/jgame2d/entity/Player.java diff --git a/assets/player/boy_down_1.png b/assets/player/boy_down_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4807748a32a0d87fc8b5401f7943d650c6086b59 GIT binary patch literal 5968 zcmeHLdss|c8=rJlA>DLv7?UKL`!vmrrgWq6G?i|;(w;qgYBaZIre=yIhTV#$Zr?; z`s+WPsr&Jk#Y3$`rf71Vr0i#tl$eX{9I^NRijGT(hAxcDkWtiG-~|L|g@%A5l_9!o9t#zn-vINg)>ineGDeeJ>`nn}WnH*F~|E3rxAXSR!>O}yf+tJRKPV(#j~y_Vwtti$+BwSMM_oYc298 z%r^OXb|rh~mzF&_bi)H=jyZVKwW!{zJtx69@U{;)@!090UY|~;RmH3(^UH-3ZH-!7 zMOgE~aE;1hXeK6DWqR?8?FY}^T>7LjvflfKpOKqt?$Zv#7s>Yaf&Qm1or)UQHMVSH z$;zA^ZJV+&ciTPE%cR0h%bK1$lr+kA9M&z+{uk8D@X@HnCPngs+qc;s*AMdV*PfkN z+EA4lp0?z0hGCnY%O~1^N?iElcqGdAz$2YZ%^B^NWd0}i_l?>(r9oi7OecwQvL`Y4 z!R!hwCwp;yneph_qQ#>3MBDsYC-3;Gjp13xPSkJdUb{)RCav4h^j-dz-nabo?*~k` zf|e^C-c2)p9jbdg$(EJd8?y4kf-50AvdD)nZoiP3l2-dFShce}ik|XcnvR^K-51uDYvDO>XuXlkHxa zpYrPTyD62~GWAEnsktRO$09=PaHZzsgsFMW#ivn&cNzm9MMyRtxsHj9Pw~pAZA^M{ zWlFciE7T!VEuhWbmx$3Y54uo2t@e|1)3ibAM%x)Th&R?b6uZ{x9>O;D1P0iYNCR4< z8g~{<-}>%QI#^1dzqcT-b@Q|050BO*zZ;Lfi!rJ$zF+SwZ|ivF z7xgqLPT-vqD0;lAw?xBc+1RYhxLDiuckR|*iv&ImJe&XW_ycp?m;<*G(cLRgoYq!# z*kEdcK&Y(YIy!nV934MzTJTo2Gj=20<${M{g1cAlEF;Z1i8OZJF3ZGZ$^xU5kiEr5 z0g<@q$5TmM7tf%{>bK(J?NWR+Cxiz79;9ynO7miUJ>#15f^w`yabnN8uGpQu4fjv? zBla!?@>{G_^0q@c9eDhXKqJ*ZA0=chRU4nQEe2Jwb#?cLvUTfU$`CXpD zjXtLi>i$W_JsLfA`*S62=3|d$u7w} zSdN*a+3p!*XXnp*?{E`Jcw-z|;t3YmzSoJ5=9|?=<}bW>bd6eu-n8tsgjq-Qa)V7P zost{CDW8C~7~>`YuU-uUq&EJCG~hyRSR*2m&!~Cl@|M{FtsZ zP{_vsY#|H6$oV4pkU=19?BpT<42Psh78J@A&`~c>ok1bFY&vR@6%)r4IYMDvml!eR z731a&#)N}ZHpvSi(pt9fg9&k;CNhDCjJQJBJ-8+Ddwf zl#OM;4H7&b7=R_gfe3oN9A&D?j3_{LPkU(lW(y53SDH-WAQUWQulyURe94s7^((_20`3$DV7aN6) zp=pUQ7Nd{Fcpgeu_#0q8_fcVAesb{31}8XrJ^a;I4YjSvbMIe;wY&U>p-*j zV9-$n4DM@>2M>^PgknBiUR(iND3g30^5*g(FDamq4NoTG$YcV6h$B%6I5OcY$QKez z;51jT;&B+l&AQZxi1ffb3#lq0w>A=zgit2!wmHqH+XpUkCkP5}# zLLrZiQbdbXP%4WGX)|0dG*=<0G*p5iwxZ&OYt8`(#VVUN*dKxa!sHbulnMSfp0Cg^ zEcRllOehX_7rV2TLZI}=Jl_Ldl)Wb%xN6{FHMD&UjiFjN{ z{H;!(^X9+cM%WMM=--)-gbi6c3PsUy6^BXPWr82N{|<17!IcX_0*UZPp^th>_n^$?4gV@&E|+XZJp0(=4+>aKbCZjXMeN*ZmCe5V{%xt(6)z3rBhK_xfiLYh z{<#9ChWt)S3zWz0U4_ z#M%C;EuEgzZXPm=4ZMHAqt2=MxRL*)wO22;v{%?1U5r-o`A#wi(1aJig literal 0 HcmV?d00001 diff --git a/assets/player/boy_down_2.png b/assets/player/boy_down_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff298c2a3ee3e53f0ce4ef63892401f05130dab GIT binary patch literal 5980 zcmeHLXH-+!77o3r7%9rL3^AybA?=bb0jVZx=!hZ;H#avBA;lz+ATlaN!GdiRrCAU` z20;b}5e315jtYucPz1z|4H0{NHvtvj_?+ijZ~mFJ5^~P@_P6)>&ffcQljiF^b(ryJ zV-yNCjKlWuNB*MKZ$o|L)2iWiiWF(#`<_m(57&6ws)ek=8u{n~D3LTF5_Z<#cd_S2NX~@rP^Cy|DO=isw zuevz9(`gBl* z?Rf_$E%qS_$IT{vwBs!Evou?dN9+XYiJYzH&FmM#x9)b+ZV+~+X5C0$TJG51+>svj z2B_6NC+*!J_;dN~7S;Tdhce4M_iUW9=Ynu9V1kc1RoMP(^O3{D@EN_C?!8sG*T4Ll zYHHY=Tc$hVn@vAk_XK|1p319L{)mW=LprkvHxmsO{&qp zI19L|7jf8NBlwk|YyfAoi-a(7=A;aVL1ko4igo+H+jC^=C>Pp5$6h2Wrgcwq{L>5vU z8xkidrM$JQ^GV!R$5ZL(T?xTY`P1v@((Jmqw2t0|#qcS)C1Z%ktOeIyhgFWM0@%^1 zRuXNV?d-CKko(2^>bTY zjy2;OHk_$%Z22NbOP8!{3Ow6DjJd~*um@sO;B6H-**hjf;b#LIE4z~p7|3lpPHg_LlGd>$ z&%3=dJe?UM*?izh?2(Y}0`5$=r0uoC4g_ore*^kmU$S-my~cY*G|?G)&4xm&r8Rx> zHs@*i8(xmC+*&^tgK1l3BB5*$V*2LHxPB?#G?QYJswjPGT@k^ia+_DLbzED$SlaEm zu4?@5G`qO#JL9)4PG8f6GH`Ys%1wz25S6cg_|*UBN&D7{?{pXF`ScARx?uLEF^Rl} zV_~t+f8JD@^S*9IOX1|bi6XH$C#vwm0StCvM- zwU?m`mQv>-?P;gmPRYUgFtn?WVHow~barT8n-Pt*%xcOj(|!AP_@KI%KDNoo&94=h zkG8ut*ZAs{uEuT7@he`xxPOlCdC$6sS{XI=_4Hp3w67RbW%PzyfAeiqUFfc=P^r_M z-=D`8`WK&nPOrMlh*i~^h0k1K(_rT8^f)4%@tbW6wzfdo*>$F)WNq#0+h)I?GkNVc z{aI_2KTPsR>pjwa6`*?D((849QM_}ylE~V(YuAu8sd2WtNgE0B<1!Z3fHAOPCF^Y?8wWGQI;s0z8rV=j~xu@TiFTgSnMOd<|#e_`SunDlT(@e!W@Ux z74&HqE5o-}ScJq7D`pA^L0n0ZCQw|*}U}5>+0oedX#>- zw-S2JTqwQC)qm-6ov~}o$X@;4)4THJ9X2Lq>vy8Jnyndg9@A@m3C`%Gj~X{pB{*?n z=j}B2qr9@DTPA{u?h|t-nfzSj^~&ucoYFTk;tzjlkMpY`NpYfyjWI=jN6V6R*Q3Yh zEd%WLqVwlkAM;qz1pV|LJic{8#*7lck}=XZ#rV(Oq!0Bymorm#b7*#!I@Mv(Z=j)u z540PrMT@Q4V*7L-yXXXmw1tUKXb}1cXQ$sRFg4b@ z_HI?Jox#u!?S!aDS3~a56Hoy8w_9VbT|=ju+r_uvXlLcf-@NdS`o#qj%C_&gvuQ61 zH9T90+$giSGnkM>ga`Q&9*kFsq{xkfLOHppq#zUpD=<7bLMUcodk!4JVuXAaHkiUC za;5HYq>#N(1_vzk4ulp)K@2|D#o5?N#Y6~1umZ%WMA2e7Q^mq+c$vs|^)vyC(LfYY zEbJ_Z$1R_8H033qA$>YQdP=yoAt<@C$93HS7k_n{>p+t;PbAmicjDm&5BI}p|a%2_q zR3VcC4%A}}y-)(@En|dGB-L1`(SwnE=o3yFBa7Bx_z(e(hDAsqa)g=m1zsT(d_JHr_M=|; zOCX55PyAn?KkB84MWZXzLjuL9opL-_SarNiz628TnVPR48KCk2fR6)-Fa<}Z(`Yyb zkw?Mt7!0Z-;OIyZ@PR>89I;#hiXm7{g^=Tg2oDK>sT2kvz>xq@fFnaB5C_r)WE{w+ z17sqVOrlcYK@>hRAyNro^x&w}RD6UA<`F4GGJ}ZYksuJE0(m$(9pK?$Iz*$9s0@fs z?T{>0>ubUV317RULUP5lSXsXt-ah^<5x zH^_egyr6&7-;$z*8mTZCO&ef>P`~_gFc#)(jsVfIe+h~N#St*lZwHF)uUcAdW%d^B^jX$OmA@FWKc1fkFw&VAlvF2at0{ic53O7~6sT zv-=XSjD*$6MFdDVA_GTs3?$K+WHQr{jO{;dj1xiKVL$HHN!^3ET;^asoYXyv$x$a_ zK#WuxErexX>hv*h{tIr9{XmZXo%vu`zqPwW8i!PIq{2rj{-*n{0Q(tc2q9Q3mwYSq z!H|Ag238r71&7?1gijadK$fTr=^uOzWZysN0ipikHWe|2`%1K&_3j$U`2+jil_^aujNanfk4T%FMPzCJhuE zuBX8*BON0LY^>_-DdhJREslq4ApKNIz;@HbDd>dbwmDrx*psY}U5i}s)L?>dv|yzb zNNRJ?eWztP#AK-(dCN=fW$9W;4~9wOWhrn(XMFsNSiP44QBQb8t!=r*j~rgVYqj6( z?8s__&D`>T+{Z6looNRk|$?D~X9%1`GbUMkn zGgsEW2p}B4f7`YQM=Sz1RHhrwSaR&yRGuW;#Id5zW-d(*;qcZ*m1WwZYfDE5yt qt%m(8N%TkXRR!j~=mr`z=+hfjFNUgO&{XwL7#vS;j}o`=#D4=?F!n|O literal 0 HcmV?d00001 diff --git a/assets/player/boy_left_1.png b/assets/player/boy_left_1.png new file mode 100644 index 0000000000000000000000000000000000000000..85d10ad33f68d5ab6bac832ac733124671e44549 GIT binary patch literal 6068 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 literal 0 HcmV?d00001 diff --git a/assets/player/boy_left_2.png b/assets/player/boy_left_2.png new file mode 100644 index 0000000000000000000000000000000000000000..92f39a8e0f28bfa384d3574261871cd0eb1e7fa9 GIT binary patch literal 6011 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 literal 0 HcmV?d00001 diff --git a/assets/player/boy_right_1.png b/assets/player/boy_right_1.png new file mode 100644 index 0000000000000000000000000000000000000000..247ecea4fae6769d5ffac74e32a9089341f4435d GIT binary patch literal 6059 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 drbJ%+h&?1T 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 literal 0 HcmV?d00001 diff --git a/assets/player/boy_up_2.png b/assets/player/boy_up_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc797a91d7045c9544f124d1711b9e4d187be97 GIT binary patch literal 5861 zcmeHLX;c$g7A_W9Ww8YWQHgOyOi~FUBr$=;01_d{rXr$Hsj7sS)hq-=XcbUUk=C(Y z5ZeV%+;C~e1vgMsv=x_D5fNDgQFH_prG-|f5>Rp4vBz_!|5@i`sr$bB-TS_G?|Z3a zh6GQsvKVRs0Du)Yz&8y0wAH=LOt5#C7w;edFcvR}h*XC`TAV^D7llB;%mW&a4ZEB-FCP4LOX|Ve`F!n~63=3T7eB62k5+{DwABT_ zs~@+0^gHpe|A?e}m#e!FHx^`xEinPZJP%V)HRJ8Qa=bFXl}6L#K9 z-5Pl~vzfK}=~!p+>@UwO0udfwKSZ7lb zZQAE*uI1r*v#jQYZUoeoa7Zbnkk0MqF-NRZQU-Mv1&x!O7GR%Q&tT& zsjTdrlEkQdCR#W+V9yE{s+d9Da-KtOsLp-!_@sa9N#2t~FBQA$R^H{!N{T#M+FT-g zG2S4XRI_W&46xltHIMVN$QTNTrjB-<7pHKy z(3;2YooBppK<5Pi=F&5J?icTN8@BBzWrhXEF*{^y=$kC1TVdCr=aC!euzL3J6YE>*>Zg}&on1Q&ilzN(caVOcFD_qQ;@&2oHfOTJ-2fDF!?O zTovg210z$GWMyo7dUIAwuC~l?ee|o=ecJmy^%ok}r??9L0Rbyu~xG= zcl_Gv!T0J1uFOQi5hg}vaZb4#D{fm@wVDXWnjbo29#Y~H++619Se$iE<8`zLdRFc{ zt7poIiX{d;vJJ0U%GQU~)w<{0F9w|B|x{&G4 z+<4xe&TOlByC;H~DW9Kc^AIqoj{jH14U1}PiubvEsAlKENl8lrs;2&s9&es`X;B1v zYR0|O4>u>>+P~@e-KdlUH`sUDz#9fPnq3b)h(7!Bxk=Ru`~u_dP40CKdCucfva+8I ze?8o*JEJLGJD?zG#gm1pPaD0Tt&13+o-lc@Fz7KpEiLMhu z(;towxV_|Rsn19&>yDVFosTscLypX{KJK=C<0TqUb*u9q;U$TMOGx|obuC+XJjk!) z^dy)4m0ex-Z&FU(k9yS@ToNrvp%7(}_@=i=QfqkPo{XCh925Bs9)(YCuCn{BwfMGM zt{Z-#&7Ag>>=&t5a{{f~jpZ#pT1i4<<0n6aEb)qX|nwqpAz4Vd`Y zg(?aNiyk(hYDud1is`09gmZ>R5AbO>Ex&Swd);s936g7ZMn_q5a&A{;!>Jx%TPU=< z+QXnQ2hDFJlQ+$_H`@Oweak%KL75vD;7@K?+|pgLEW1q``g3z~+tpk9n|LO_`!+Im zI6HKhbX?w1pt?WK`rw*;+bx5$op0hgMpdEf>*zy?V>n}e z9&7Ek+yC|C+i3a=2jM@%;C)`NEmISvW3Fg+hn62qGhSmmGH)qm!U5ZYIit?`F0X_~ zyoD}o8NEKJh~mg_2uZiN*pd3KtgSjHeHYi$)zPRVM$!WhG<#}zr9}FJOHKR><92VO znNc+{Qs9>@`BgPhzneMUF(DS!lh0NCV;uwx*S7sQ0+QX+)N z`6w|#s=$s30AP71C?Hsjs&RZ&D3Y=9ZO2dJaUz6`pXtE^c?u31Ckj}gM8g*ZN5Bij zFayDRds(m&m>7W+RYSN0sYIq?Cb02(UMBWkXC~osdWc%g#z*o(a2&Z3#Zie=B1rH{ z5XDpQUKTi(5)m-NeEs_lFM*9PKYnpsM&ZtHje8f$3|hl1kBhMKzFaFSE&&a7rUWi z^T7Zl3JB5(Aca6-kox;$qdeXRZ<(r3MNCgp0;C|3i6BWT{lr71_KW`*@3S7N2<$W_ zg`q0BMhT;S@u*Bas((<0M5F2-Q=>w4CVk!#L_orl(ns#^Glk0w`QW3IQ7Dos^d35N ze0~3*+(8=6o$BF118H+8A6kdUOmWs$xF{u5JpoLnpW-*`SkKd|^H)mphyJWV-` zKM#e~U*`E7_ybcIw%e)H%0%v8OzJ;ytlokRzjesCDtoq0xOrTR>PXg8< z9s)=}p$O=LPuW#+fm#bGQ6C{z1K2ua&81&w-1xrwbNv*rjYDzW07<_?EBfWbbAnw$Ly~MOSeZcxw=9O*C-Sc5vu%Dr}uU9UvT~W`)c&B z-220Ny*YA4BG$!m>SD`D{-xCWLwaTDcMxGY_u8-n4m&SN9}djE zD$zC4-+1*^-`^Mkqy84;tMvUQ*EhMoN`bEef2*!<^EIvMRqcZGw zpB8(d_6Hk1v4?SUMZhc-09X#zy$pbyTu01ks^;?iOqdVFbVX?skq)P6>-r#2mW1eNdD$h&68d9lB1=fR<8(u!<12^Ka64YV^H zXkfb?j|1X~Cu&cvU5s62&|>@Ld(zl>PU^F5?$L91nN?lQ7|{g|06DS1 z4kstfQc-I7+scW%oKv>=+zB7#M=lXW79XmA?p$Ib$+>>E-rESfiqg`aN;Y(1JRRdu zb!y5zveg=y@|$(zgOnqb$`N5l;N#KhD=F;skuzkgF)I%AWgQ9CNPV*{zp0o{!~ TL$Lp?0f6fl>{~QBcFDg1(>T4R literal 0 HcmV?d00001 diff --git a/src/de/mp/jgame2d/core/Direction.java b/src/de/mp/jgame2d/core/Direction.java new file mode 100644 index 0000000..0f9b7b0 --- /dev/null +++ b/src/de/mp/jgame2d/core/Direction.java @@ -0,0 +1,19 @@ +package de.mp.jgame2d.core; + +public enum Direction { + + UP("up"), + DOWN("down"), + LEFT("left"), + RIGHT("right"); + + private final String name; + + Direction(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/de/mp/jgame2d/core/GamePanel.java b/src/de/mp/jgame2d/core/GamePanel.java index 293a3f6..781f752 100644 --- a/src/de/mp/jgame2d/core/GamePanel.java +++ b/src/de/mp/jgame2d/core/GamePanel.java @@ -1,5 +1,7 @@ package de.mp.jgame2d.core; +import de.mp.jgame2d.entity.Player; + import javax.swing.*; import java.awt.*; @@ -9,7 +11,7 @@ public class GamePanel extends JPanel implements Runnable { final int originalTileSize = 16; //16x16 tile final int scale = 3; - final int tileSize = originalTileSize * scale; //48x48 tile + public final int tileSize = originalTileSize * scale; //48x48 tile // 4:3 ratio final int maxScreenCol = 16; final int maxScreenRow = 12; @@ -21,6 +23,7 @@ public class GamePanel extends JPanel implements Runnable { KeyHandler keyH = new KeyHandler(); Thread gameThread; + Player player = new Player(this, keyH); //Default position int playerX = 100; @@ -70,23 +73,13 @@ public class GamePanel extends JPanel implements Runnable { } public void update() { - //Move player - if(keyH.upPressed) { - playerY -= playerSpeed; - } else if(keyH.downPressed) { - playerY += playerSpeed; - } else if(keyH.leftPressed) { - playerX -= playerSpeed; - } else if(keyH.rightPressed) { - playerX += playerSpeed; - } + player.update(); } public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D graphics2d = (Graphics2D) graphics; - graphics2d.setColor(Color.white); - graphics2d.fillRect(playerX, playerY, tileSize, tileSize); + player.draw(graphics2d); graphics.dispose(); } diff --git a/src/de/mp/jgame2d/entity/Entity.java b/src/de/mp/jgame2d/entity/Entity.java new file mode 100644 index 0000000..4604bed --- /dev/null +++ b/src/de/mp/jgame2d/entity/Entity.java @@ -0,0 +1,18 @@ +package de.mp.jgame2d.entity; + +import de.mp.jgame2d.core.Direction; + +import java.awt.image.BufferedImage; + +public class Entity { + + public int x, y; + public int speed; + + public BufferedImage up1, up2, down1, down2, left1, left2, right1, right2; + public Direction direction; + + public int spriteCounter = 0; + public int spriteNum = 1; + +} diff --git a/src/de/mp/jgame2d/entity/Player.java b/src/de/mp/jgame2d/entity/Player.java new file mode 100644 index 0000000..921b672 --- /dev/null +++ b/src/de/mp/jgame2d/entity/Player.java @@ -0,0 +1,91 @@ +package de.mp.jgame2d.entity; + +import de.mp.jgame2d.core.Direction; +import de.mp.jgame2d.core.GamePanel; +import de.mp.jgame2d.core.KeyHandler; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; + +public class Player extends Entity { + + GamePanel panel; + KeyHandler keyH; + + public Player(GamePanel panel, KeyHandler keyH) { + this.panel = panel; + this.keyH = keyH; + setDefaultValues(); + getPlayerImage(); + } + + public void setDefaultValues() { + x = 100; + y = 100; + speed = 4; + direction = Direction.DOWN; + } + + public void getPlayerImage() { + try { + up1 = ImageIO.read(new FileInputStream("assets/player/boy_up_1.png")); + up2 = ImageIO.read(new FileInputStream("assets/player/boy_up_2.png")); + down1 = ImageIO.read(new FileInputStream("assets/player/boy_down_1.png")); + down2 = ImageIO.read(new FileInputStream("assets/player/boy_down_2.png")); + left1 = ImageIO.read(new FileInputStream("assets/player/boy_left_1.png")); + left2 = ImageIO.read(new FileInputStream("assets/player/boy_left_2.png")); + right1 = ImageIO.read(new FileInputStream("assets/player/boy_right_1.png")); + right2 = ImageIO.read(new FileInputStream("assets/player/boy_right_2.png")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void update() { + //Move player + if(keyH.upPressed || keyH.downPressed || keyH.leftPressed || keyH.rightPressed) { + if(keyH.upPressed) { + direction = Direction.UP; + y -= speed; + } else if(keyH.downPressed) { + direction = Direction.DOWN; + y += speed; + } else if(keyH.leftPressed) { + direction = Direction.LEFT; + x -= speed; + } else if(keyH.rightPressed) { + direction = Direction.RIGHT; + x += speed; + } + + spriteCounter++; + if(spriteCounter > 12) { + if(spriteNum == 1) spriteNum = 2; + else if(spriteNum == 2) spriteNum = 1; + else spriteNum = 0; + } + } + } + + public void draw(Graphics2D graphics2d) { + BufferedImage image = null; + switch (direction) { + case UP: + image = (spriteNum == 1) ? up1 : up2; + break; + case DOWN: + image = (spriteNum == 1) ? down1 : down2; + break; + case LEFT: + image = (spriteNum == 1) ? left1 : left2; + break; + case RIGHT: + image = (spriteNum == 1) ? right1 : right2; + break; + } + graphics2d.drawImage(image, x, y, panel.tileSize, panel.tileSize, null); + } + +}