Matrix overlapping
Monkey Forums/Monkey Beginners/Matrix overlapping
| ||
Hello there. I encounter a problem with the Matrix use. I need to make a card shake so, i use PushMatrix and PopMatrix in this way. Strict Import diddy Function Main:Int() New Game() Return 0 End Global gameScreen:GameScreen Class Game Extends DiddyApp Method Create:Void() ' diddy millisecs version Seed = RealMillisecs() gameScreen = New GameScreen gameScreen.PreStart() End End Class Class GameScreen Extends Screen ' State of game Field _cardCard:Card Field _stateCard:Int Method New() name = "Game" End Method Method Start:Void() _cardCard = New Card(SCREEN_WIDTH2, SCREEN_HEIGHT2) End Method Method Update:Void() If KeyHit(KEY_1) Then _stateCard = 1 ElseIf KeyHit(KEY_2) Then _stateCard = 2 ElseIf KeyHit(KEY_3) Then _stateCard = 3 ElseIf KeyHit(KEY_4) Then _stateCard = 4 EndIf _cardCard.Update() End Method Method Render:Void() Cls DrawText "Key 1 = HIDDEN CARD, KEY 2 = REVEALED CARD, KEY 3 = SHOWING CARD", SCREEN_WIDTH2, 10, 0.5, 0.5 _cardCard.Draw(_stateCard) End Method End Class Class Card Const HIDDEN:Int = 1 Const REVEALED:Int = 2 Const SHOWING:Int = 3 Const SHAKING:Int = 4 ' Image Field Field _gfxCard:Image Field _nFrameOffset:Int ' Coordinate Field _fXpos:float, _fYpos:Float ' Flip Angle Field _fScale:Float = -1.0 Method New(_pfXpos:Float, _pfYpos:Float) _gfxCard = LoadImage("spriteSheet.png", 120, 166, 2, Image.MidHandle) _fXpos = _pfXpos _fYpos = _pfYpos End Method Method Update:Void() _fScale += 0.1 End Method Method GetWidth:Float() Return _gfxCard.Width() End Method Method GetHeight:Float() Return _gfxCard.Height() End Method Method GetXPos:Float() Return _fXpos End Method Method GetYPos:Float() Return _fYpos End Method Method Draw:Void(pCurrentState:int) Local frame:int Local scaleX:Float = 1 If pCurrentState = HIDDEN Then frame = 1 ElseIf pCurrentState = REVEALED Then frame = 0 ElseIf pCurrentState = SHOWING Then scaleX = Sinr(_fScale) If scaleX < 0 Then frame = 1 Else frame = 0 EndIf ElseIf pCurrentState = SHAKING Then PushMatrix Translate _fXpos, _fYpos PushMatrix DrawImage(_gfxCard, 0, 0, Sinr(_fScale), 1.0, 1.0, frame) PopMatrix PopMatrix EndIf DrawImage(_gfxCard, _fXpos, _fYpos, 1.0, scaleX, 1.0, frame) End Method End Class The problem that is that when i press on the to shake the card instead of appears alone the card overlap the old one. Where am I wrong? |
| ||
you are drawing it shaking when shaking and otherwise. You are drawing the card in the last line of the Draw Method(always) and in the else if of the shaking option. |
| ||
Ok i thought then when you use PushMatrix all the elements not surrounded by Push and Pop disappear and reappear after the Pop. Ok i have changed my code and now it's work fine. Thanks. |
| ||
You also don't need that many Push and Pops. PushMatrix will push the current transformation onto a stack so that you can get it back when you are done. So in your example you only need: [bbcode] PushMatrix Translate _fXpos, _fYpos DrawImage(_gfxCard, 0, 0, Sinr(_fScale), 1.0, 1.0, frame) PopMatrix [/bbcode] |