You could use Max2D's handle system...
...Not a particularly clear example but it was to hand. You should pay particular attention to 'TVectObj.Draw()' and bear in mind that the current 'system scale' will also play a part.
Strict Type TPoint2D Field x#, y# End Type Type TVectObj Field originX#, originY# Field scaleX# = 1, scaleY# = 1 Field rotation#, alpha# = 1 Field r, g, b Field points:TPoint2D[] Method AddPoint(x#, y#) Local thisPoint:TPoint2D = New TPoint2D thisPoint.x# = x# thisPoint.y# = y# points = points[..points.length + 1] points[points.length - 1] = thisPoint End Method Method SetColour(r, g, b) Self.r = r Self.g = g Self.b = b End Method Method SetScale(x#, y#) scaleX# = x# scaleY# = y# End Method Method Draw() SetTransform rotation#, scaleX#, scaleY# SetColor r, g, b For Local thisPoint = 0 Until points.length Local nextPoint = (thisPoint + 1) Mod points.length Local handleX# = originX# - (originX# + points[thisPoint].x#) Local handleY# = originY# - (originY# + points[thisPoint].y#) SetHandle handleX#, handleY# DrawLine originX# ,originY#,.. (originX# + Points[nextPoint].x#) + handleX#,.. (originY# + Points[nextPoint].y#) + handleY# Next End Method End Type Type TPlayer Field ship:TVectObj Field vx#, vy# Function Create:TPlayer(ship:TVectObj, x#, y#) Local thisPlayer:TPlayer = New TPlayer thisPlayer.ship = ship thisPlayer.ship.originX# = x# thisPlayer.ship.originY# = y# Return thisPlayer End Function Method Update() If KeyDown(KEY_LEFT) ship.rotation# :- 4 EndIf If KeyDown(KEY_RIGHT) ship.rotation# :+ 4 EndIf If KeyDown(KEY_UP) vx# :+ Sin(ship.rotation#) * 0.1 vy# :- Cos(ship.rotation#) * 0.1 Local vectMag! = Sqr((vx# * vx#) + (vy# * vy#)) If vectMag! > 10.0 vx# = (vx# / vectMag!) * 10.0 vy# = (vy# / vectMag!) * 10.0 EndIf Else vx# :* 0.99 vy# :* 0.99 EndIf ship.originX# :+ vx# ship.originY# :+ vy# If ship.originX# < 0 ship.originX# = GraphicsWidth() Else If ship.originX# > GraphicsWidth() Then ship.originX# = 0 EndIf If ship.originY# < 0 ship.originY# = GraphicsHeight() Else If ship.originY# > GraphicsHeight() Then ship.originY# = 0 EndIf End Method Method Draw() ship.Draw() End Method End Type SetGraphicsDriver GLMax2DDriver() Graphics 800, 600, 0'32 HideMouse Local ship:TVectObj = New TVectObj ship.AddPoint(0, -10) ship.AddPoint(10, 10) ship.AddPoint(0, 7.5) ship.AddPoint(-10, 10) ship.SetColour(200, 255, 255) Local player:TPlayer = TPlayer.Create(ship, 400, 300) glEnable(GL_LINE_SMOOTH) SetLineWidth 2'0.25 Repeat Clear() 'ship.SetScale(1 + (Cos(MilliSecs() * 1.5) * 0.1), 1 + (Sin(MilliSecs() * 1.5) * 0.1)) player.Update() SetAlpha 0.5 player.Draw() 'FlushMem Flip Until KeyHit(KEY_ESCAPE) End Function Clear(alpha#=0.6) SetColor 0, 0, 0 SetHandle 0, 0 SetTransform 0, 1, 1 SetBlend ALPHABLEND SetAlpha alpha# DrawRect 0, 0, 800, 600 End Function
...Not a particularly clear example but it was to hand. You should pay particular attention to 'TVectObj.Draw()' and bear in mind that the current 'system scale' will also play a part.