FlatRedBall
  • 🖥️Downloading FlatRedBall
  • 🏗️Building FlatRedBall From Source
    • Linking Games to FlatRedBall Engine Source
    • Linking FNA
  • ❓Need Help?
  • ✨FlatRedBall Features
  • 🎓Tutorials
    • Introduction To FlatRedBall
    • Quick Start Guide
    • Beefball - A Full FlatRedBall Tutorial Project
      • Creating a FlatRedBall Project
      • Creating an Entity
      • Creating a Screen
      • Controlling an Entity
      • Creating the Screen Collision
      • Advanced PlayerBall Controls
      • Creating the Puck Entity
      • Adding Multiple Players
      • Scoring and Restarting Rounds
      • Scoring Hud
      • Scoring Hud Logic
      • Adding Dashing
    • Platformer Tutorials
      • Platformer Basics
        • Creating an Entity
        • Controlling a Platformer Entity
        • Movement Values
        • Double Jump
      • Checkpoint and Level End
      • Climbing Ladders
      • Doors
      • GroundCollidedAgainst and Movement Values
      • Moving Platforms
      • Multiple Players
      • NPC Dialog
      • Breaking Blocks
        • New Project Setup
        • Creating Level1 Map
        • Creating the Block Entity
        • Block Removal
      • Dealing Damage
        • New Project Setup
        • Enemy Entity
        • Shooting Bullets
        • Damaging the Enemy
      • Enemy Movement
        • New Project Setup
        • Enemy Entity
        • Enemy Input Logic
        • Detecting Platform Edges
      • Ground Type and Water Movement
        • New Project Setup
        • Creating Level1 Map
        • Adding Ice and Water
        • Platformer Movement Values
      • Animation and Platformer Values
        • New Project Setup
        • Creating AnimationLayers
        • Modifying Platformer Values
      • Wall Sliding and Jumping
    • Damage Dealing
      • Setup
      • Team Index
      • Damage Events
      • IDamageArea Removal
      • Melee Damage
    • Entity Variants Using Inheritance
    • FlatRedBall.Forms
      • Getting Started with FlatRedBall.Forms
        • Setup
        • Working with Common Controls
        • Forms vs Gum in Code
      • Forms and Xbox360GamePad
      • Data Binding (BindingContext)
        • BindingContext Property
        • Binding FlatRedBall.Forms
        • Parent and Children Binding using BindingContext
        • ListBox Templates
      • Styling Forms
      • Defining New Forms Types
        • Adding New Types to FlatRedBall.Forms Library
      • Accessing Forms Events in Gum Runtimes
    • Top Down Games
      • Top Down Basics
        • Setup
        • Input Device
        • CurrentMovement
      • Enemy Movement
        • Enemy Pathfinding
        • Direct Enemy Control
      • GroundVelocity
      • Animation
      • Sorting
    • Post Processing
    • Rock Blaster - A Full FlatRedBall Tutorial Project
      • Introduction
      • Setup
      • Game Skeleton
      • Player Entity
      • Player Behavior
      • Rock Entity
      • Collision
      • Rock States
      • HUD
      • Multiple Players
      • Health
      • Health Part 2
      • Destroying Entities
      • Cleaning Up
    • Code-Only Projects (No Editor)
      • Creating a FlatRedBall Project
      • Adding a Circle
      • Loading Textures and Using Sprites
    • Code Tutorials
      • 3D Camera Setup
      • Adding FlatRedBall to a MonoGame/FNA Project
      • Adding WPF to an Existing Game
      • async and await
      • CLR Profiler
      • Collision Jitter
      • Culling
      • Customizing Cursor Visuals
        • Windows Desktop
        • windows-rt
      • Depth Buffer Z Fighting
      • Dictionaries and Enum Keys
      • FlatRedBall XNA in Windows Form
      • Improving Performance
        • CustomActivity Performance
        • Identifying Screen Creation Performance Issues
        • Rendering Performance
        • Manually Updated Objects
          • Introduction
          • Measuring Automatic Updates
          • Measuring Sprite Automatic Updates
          • Manual Particle Systems
      • Object Sorting
      • Pix
      • Rendering Sprites with Shaders
      • Tile-Based Movement
      • Velocity
    • Distribution
      • App Icon
      • Emptying bin Folder Using Probing Path
      • itch.io
      • Release Build
      • Steam
    • FlatRedBall and Velcro Physics
      • Using Velcro Physics with the FlatRedBall Editor
      • Code-Only Velcro Projects
    • FlatRedBall Editor Plugins
      • Introduction to FlatRedBall Plugins
      • Creating a Plugin Project
      • Creating a Plugin Class
      • Adding UI to FlatRedBall
      • Using MVVM
      • Creating a NamedObjectSave-Editing Plugin
      • Adding File Format Support
      • Adding Code Files to a Game Project
      • Errors
      • Exporting a Plugin
    • Additional FlatRedBall Editor Tutorials
      • How to Create a First Person Camera
      • How to Play Sounds
      • How to Share Reference Data Between Screens and Entities
    • Math Tutorials
      • Circle Collision
      • Determining required magnitude for trajectory
      • Introduction to Collision
      • Power of Two
      • Rectangle Collision
      • rotation
      • statistics
      • trigonometry
      • vector
      • matrix
      • interpolation
    • Overworld Tutorials
      • Spinning Mode 7
        • New Project Setup
        • Adding Camera Code
        • Fading In and Out
  • 🎞️Videos
  • 📐FlatRedBall Editor
    • Display Settings
    • Entities
      • BaseEntity
      • Constructor
      • ConvertToManuallyUpdated
      • CreatedByOtherEntities
      • CustomActivity
      • CustomDestroy
      • CustomInitialize
      • Destroying Entities
      • Entity Performance
      • Export Entity
      • Implements IClickable
      • Implements ICollidable
      • Implements IDamageArea
      • Implements IDrawableBatch
      • Implements IGumCollidable
      • Implements IVisible
      • Implements IWindow
        • SlideOnClick
      • Import Entity
      • Inheriting from FlatRedBall Types
      • LayerProvidedByContainer
      • MoveToLayer
      • PooledByFactory
      • Top Down Movement
        • TopDownSpeedMultiplier
      • Use Global Content
    • Events
      • ResolutionRrOrientationChanged
    • Factories
      • CreateNew
      • EntitySpawned
      • Initialize
      • SortAxis
    • Files
      • File Types
        • Animation Chain List (.achx)
        • Comma Separated Values (.csv)
          • Combining .csvs With Entities
          • CreatesDictionary
          • Cross Referencing CSVs
          • Instantiating Custom Types
          • OrderedList
          • SetCreatedClass
            • generate-data-class
          • uniformrowtype
        • Effect (.fx, .fxb)
        • Font (.fnt)
        • JSON (.json)
        • Model (.fbx)
        • MP3
        • Node Network (.nntx)
        • OpenDocument Spreadsheet (.ods)
        • ShapeCollections (.shcx)
        • SplineList (.splx)
        • Texture2D (.png)
        • Wave (.wav)
      • Accessing Files in Code
      • Adding File Objects to Managers
      • Destroy on Unload
      • File Build Tool
      • Folders
      • Global Content Files
      • IsDatabaseForLocalizing
      • IsManuallyUpdated
      • IncludeDirectoryRelativeToContainer
      • LoadedAtRuntime
      • LoadedOnlyWhenReferenced
      • Name
      • Platform Inclusions
      • Project Specific Files
      • RuntimeType
      • SourceFile
      • UseContentPipeline
      • Wildcard Files
    • FileVersion (.gluj)
    • Generated Code
    • Global Content Files
      • LoadAsynchronously
      • Reload
      • Setting Files At Runtime
    • Live Edit
      • Render Targets
    • Menu
      • Content
        • Additional Content
          • Using Runtime Types as Objects
          • creating-runtime-objects
          • runtime-object-charateristics
          • simple-line-of-text-tutorial
        • Introduction
        • pipeline-settings
      • File
        • New Project
      • Edit
        • Find File References
      • Plugins
        • Install Plugin
        • Manage Plugins
      • Project
        • View Projects
      • Settings
        • Camera Settings
        • File Associations
        • File Build Tools
        • Performance Settings
      • Update
        • Introduction
        • glue-reference-menu-frbdk
        • glue-reference-menu-libraries
    • Multi-Platform
      • Synced Projects
      • Changing Main Project Type
      • Android
        • Distribution
        • Setup
      • iOS
        • Certificates and Profiles
        • Copying Projects to Mac
        • Using Xamarin Build Host
      • Switch (Nintendo)
      • Web
    • Objects
      • Object Types
        • AxisAlignedRectangle
        • Camera
        • CameraControllingEntity
        • Circle
        • CollisionRelationship
        • Layer
          • DestinationRectangle
          • Is2D
        • Polygon
        • PositionedObjectList
        • RenderTarget2D
        • ShapeCollection
        • SoundEffectInstance
        • Sprite
        • Text
        • TileNodeNetwork
      • AddToManagers
      • AttachToCamera
      • AttachToContainer
      • CallActivity
      • Collidable Objects
      • EntireFile
      • ExposedInDerived
      • HasPublicProperty
      • IgnoresPausing
      • IncludeInIClickable
      • IncludeInICollidable
      • IsContainer
      • LayerOn
      • Map
      • SetByDerived
      • SourceFile
      • SourceType
    • Plugins
      • glue-gluevault-component-pages-rendertargetrenderer
      • glue-gluevault-component-pages-simple-command-console
      • glue-gluevault-component-pages-squid-gui-integration
      • kalldrexx-interactive-debugging-console
    • Profiling
    • Screens
      • AsyncLoadingState
      • BaseScreen
      • Constructor
      • Creating a New Screen
      • CustomDestroy
      • CustomInitialize
      • DefaultLayer
      • GameScreen
      • IsActivityFinished
      • IsLoadingScreen
      • LoadStaticContent
      • MoveToScreen
      • PauseAdjustedCurrentTime
      • Set as StartUp Screen
      • UnloadsContentManagerWhenDestroyed
    • States
      • InterpolateToState
      • InterpolateToState vs InterpolateBetween
      • State Categories
      • State Classes
      • States and Inheritance
      • Tunneling Category Variables
    • Variables
      • CreatesEvent
      • HasAccompanyingVelocityProperty
      • IsShared
      • Proper Variable Naming
      • SetByDerived
      • Type
      • Variable Order
    • Visual Studio Project (.csproj)
  • 🏃Animation Editor
    • Frame Time
    • Animation Shapes and Collision
  • Tiled
    • Tiled Basics
      • Introduction
      • Creating a GameScreen
      • Adding Collision
      • Colliding Entities Against TileShapeCollections
      • Working with Multiple Levels
      • Creating Entities from Tiles
      • Creating Entities from Object Layers
      • Accessing Tiled Properties
      • Working with Tiled Shapes
    • Tiled Files in Entities
    • TileEntityInstantiator
    • Using TiledObjects.Generated.xml
    • LayeredTileMap
      • Collisions
      • Destroy
      • FromTiledMapSave
      • Z
    • MapDrawableBatch
      • AddTile
      • CoordinateAdjustment
      • GetBottomLeftWorldCoordinateForOrderedTile
      • MergeOntoThis
      • NamedTileOrderedIndexes
      • PaintTile
      • PaintTileTextureCoordinates
      • ParallaxX
      • Paste
      • Properties
      • RemoveQuads
      • RenderingScale
      • SortAxis
    • TiledMapSave
    • TileShapeCollection
      • AddCollisionAtWorld
      • AddCollisionFrom
      • AddCollisionFromTilesWithProperty
      • AddMergedCollisionFromLayer
      • AddMergedCollisionFromTilesWithProperty
      • AdjustRepositionDirectionsOnAddAndRemove
      • CollideAgainst
      • CollideAgainstClosest
      • GetRectangleAtPosition
      • InsertCollidables
      • LastCollisionAxisAlignedRectangles
      • Rectangles
      • RemoveFromManagers
      • RemoveSurroundedCollision
  • 🟩Gum
    • Tutorials
      • Introduction and Setup
      • Screens in Gum
      • Gum Objects in Code
      • Events on Gum Objects
      • Events on Gum Objects Part 2
      • Exposed Variables
      • States
      • Adding Code to Gum Objects
    • Accessing Gum Screens in Code
    • Adding Components to Layers
    • Adding Gum Screens to FlatRedBall
    • Animations in Code
    • Components in FlatRedBall Entities
    • Converting Gum Coordinates
    • Creating Components in Code
    • GraphicalUiElement as IWindow
    • Gum Resolution
    • Gum Properties Tab
    • Gum Animations
      • How to Play Gum Screen Animations
      • Named Events
      • Setting Gum Animationchain Achx in Code
  • 🦴Spine
    • Setup
    • Atlas
    • Changing Spine Textures at Runtime
    • SpineDrawableBatch
      • Event
      • PlayAnimation
      • SetCollision
      • Skeleton
  • ⏸️Aseprite
    • AnimationChainList
  • 🏫API Documentation
    • FlatRedBall Engine
      • AI
        • LineOfSight
          • VisibilityGrid
        • Pathfinding
          • PositionedNode
          • Link
            • Cost
            • NodeLinkingTo
          • NodeNetwork
            • GetPath
            • UpdateShapes
            • Visible
          • TileNodeNetwork
            • AddAndLinkTiledNode
            • AddAndLinkTiledNodeWorld
            • OccupyTileWorld
            • SetCosts
      • Audio
        • AudioManager
          • AreSoundEffectsEnabled
          • CurrentlyPlayingSong
          • MasterSongVolume
          • MasterSoundVolume
          • Play
          • PlaySong
          • PlaySongs
          • StopSong
        • PositionedSound
        • Sound
      • Camera
        • AbsoluteRightXEdge
        • AbsoluteRightXEdgeAt
        • AddLayer
        • AddSpriteToBillboard
        • AspectRatio
        • AttachTo
        • BackgroundColor
        • CameraCullMode
        • ClearMinimumsAndMaximums
        • ClearsDepthBuffer
        • DestinationRectangle
        • DrawsShapes
        • DrawsToScreen
        • DrawsWorld
        • FarClipPlane
        • FieldOfView
        • FixAspectRatioYConstant
        • ForceUpdateDependencies
        • GetViewport
        • IsSpriteInView
        • KeepSpriteInScreen
        • Layer
        • Layers
        • Main
        • MaximumX
        • Orthogonal
        • OrthogonalHeight
        • OrthogonalWidth
        • PixelsPerUnitAt
        • Position
        • PositionRandomlyInView
        • RelativeXEdgeAt
        • RemoveLayer
        • RotationMatrix
        • SetBordersAtZ
        • SetLookAtRotationMatrix
        • SetSplitScreenViewport
        • UpdateViewProjectionMatrix
        • UpVector
        • UsePixelCoordinates
        • UsePixelCoordinates3D
        • View
      • Content
        • ContentLoadBatch
        • AnimationChain
          • AnimationChainListSave
        • ContentManager
          • AddUnloadMethod
          • FileAliases
          • IsAssetLoadedByName
          • Load
          • LoadFromGlobalIfExists
          • Multiple Content Managers
        • Math
          • Geometry
            • ShapeCollectionSave
        • Polygon
          • PolygonSave
        • Scene
          • CameraSave
          • SceneSave
        • SpriteEditorScene
          • Camera
      • Debugging
        • Debugger
          • CommandLineWrite
          • GetFullPerformanceInformation
          • TextBlue
          • WriteAutomaticallyUpdatedObjectInformation
      • Entities
        • CameraControllingEntity
        • IDamageable
        • IDamageArea
      • FlatRedBallServices
        • AddDisposable
        • AddManager
        • CornerGrabbingResize
        • Draw
        • ForceClientSizeUpdates
        • Game
        • GetManagerInformation
        • GlobalContentManager
        • GraphicsOptions
        • Initialize
        • IsLoaded
        • Load
        • Owner
        • Random
        • RenderAll
        • Unload
        • Update
        • WindowHandle
      • Graphics
        • Animation
          • AnimationChain
            • Clone
            • FrameToFrame
            • TotalLength
          • AnimationChainList
          • AnimationController
          • AnimationFrame
            • RelativeX
            • ShapeCollectionSave
            • Texture
          • IAnimationChainAnimatable
            • Animate
            • Animation and Timing
            • AnimationChains
            • AnimationSpeed
            • CurrentChainName
            • CurrentFrameIndex
            • JustChangedFrame
            • JustCycled
            • UseAnimationRelativePosition
        • BitmapFont
          • BMFC File
          • BitmapCharacterInfo
          • FNT File
          • Glyphs
          • LineHeightInPixels
          • RenderToTexture2D
        • BlendOperation
        • ColorOperation
          • Add
          • Color
          • ColorTextureAlpha
          • InterpolateColor
          • Modulate
          • Texture
        • GraphicsOptions
          • Filtering
          • IsFullScreen
          • ResolutionHeight
          • SetFullScreen
          • SetResolution
          • SizeOrOrientationChanged
          • TextureFilter
          • TextureLoadingColorKey
          • UseMultisampling
        • IColorable
          • Alpha
          • BlendOperation
          • Blue
          • ColorOperation
        • IDrawableBatch
          • Z
          • RenderState
        • IVisible
          • IgnoresParentVisibility
        • Layer
          • Layer Membership Details
          • LayerCameraSettings
          • Remove
          • RenderTarget
          • SortType
          • Sprites
          • UsePixelCoordinates
        • LayerCameraSettings
          • OrthogonalWidth
          • TopDestination
        • Particle
          • EmissionSettings
            • Drag
            • PixelSize
            • ScaleX
          • Emitter
        • PostProcessing
          • SwapChain
        • RenderBreak
        • Renderer
          • Draw
          • LastFrameRenderBreakList
          • RenderBreaksAllocatedThisFrame
        • Text
          • AdjustPositionForPixelPerfectDrawing
          • ColorOperation
          • DisplayText
          • GetWidth
          • Font
          • HorizontalAlignment
          • InsertNewLines
          • MaxWidth
          • MaxWidthBehavior
          • NewLineDistance
          • NumberOfLines
          • ScaleX
          • SetColor
          • SetPixelPerfectScale
          • VerticalAlignment
          • Width
        • TextManager
          • AddManuallyUpdated
          • AddText
          • AddToLayer
          • FilterTexts
          • RemoveText
        • Texture
          • RenderTargetSprite
          • ImageData
            • ApplyColorOperation
            • Fill
            • FromTexture2D
      • Gui
        • Cursor
          • Camera
          • ClickNoSlideThreshold
          • CustomUpdate
          • GetRay
          • IngnoreInputThisFrame
          • IsInWindow
          • IsOn
          • IsOn3d
          • PrimaryClick
          • PrimaryClickNoSlide
          • PrimaryPushTime
          • ScreenX
          • SecondaryClick
          • SetControllingGamepad
          • SetJoystickControl
          • TransformationMatrix
          • WindowOver
          • WidowPushed
          • WorldPosition
          • WorldX
          • WorldXAt
          • WorldYAt
          • XForUi
        • GuiManager
          • AddDominantWindow
          • BringsClickedWindowsToFront
          • BringToFront
          • GamepadsForUiControl
          • MakeRegularWindow
          • RemoveWindow
          • SortZAndLayerBased
          • Windows
        • IClickable
        • IInputReceiver
          • IWindow
            • CallClick
            • Enabled
          • ReceiveInput
      • Input
        • AnalogButton
        • AnalogStick
          • IsMaxPositionNormalized
        • DelegateBased1DInput
        • DelegateBased2DInput
        • DelegateBasedPressableInput
        • I1DInput
        • I2DInput
        • IMouseOver
        • InputDeviceBase
        • InputManager
          • ClearAllInput
          • InputReceiver
        • IPressableInput
        • Keyboard
          • Clear
          • ControlPositionedObject
          • Get2DInput
          • GetKey
          • GetStringTyped
          • IgnoreKeyForOneFrame
          • KeyDown
          • KeyPushed
        • Mouse
          • GrabbedPositionedObject
          • IsOn3D
          • ModifyMouseState
          • Restricting Mouse to Screen Bounds
          • SetScreenPosition
        • TouchScreen
          • LastFrameGestures
          • ReadsGestures
        • Windows
          • WindowsInputEventManager
        • Xbox360GamePad
          • ButtonDown
          • ButtonMap
          • ButtonPosition vs Button
          • ButtonPushed
          • ControlPositionedObject
          • CreateDefaultButtonMap
          • Deadzone
          • DeadzoneType
          • FakeIsConnected
          • GamepadLayout
          • IgnoreButtonForOneFrame
      • Instructions
        • DelegateInstruction
        • IInstructable
          • Call
          • Cnstructions
          • Set
        • Instruction
        • InstructionList
          • ExecuteAndRemoveOrCyclePassedInstructions
        • InstructionManager
          • Add
          • AddSafe
          • Instructions
          • MoveThrough
          • MoveTo
          • MoveToAccurate
          • ObjectsIgnoringPausing
          • PauseEngine
          • Pulse
          • RotateToAccurate
        • Reflection
          • LateBinder
          • PropertyCollection
        • MethodInstruction
        • StaticMethodInstruction
      • IO
        • Csv
          • CsvHeader
          • CsvFilemanager
            • Cells with Multiple Lines
            • Color
            • CsvDeserializelist
            • Rows with Lists
          • RuntimeCsvRepresentation
            • FromList
            • GenerateCsvString
        • FileManager
          • BinarySerialize
          • CloneObject
          • FromFileText
          • GetAllFilesInDirectory
          • GetUserFolder
          • InitializeUserFolder
          • RelativeDirectory
          • SaveEmbeddedResource
          • SaveText
          • Standardize
          • UserApplicationDataForThisApplication
          • XmlDeserialize
          • XmlSerialize
      • Localization
        • LocalizationManager
      • Managers
        • IManager
      • Math
        • IAttachableRemovable
        • AttachableList
          • FindByName
          • MakeOneWay
        • Collision
          • CollisionManager
            • Relationships
            • Update
        • Geometry
          • AxisAlignedCube
            • CollideAgainstBounce
          • AxisAlignedRectangle
            • Axis Alignment And Rotation
            • CollideAgainstMoveSoft
            • Color
            • GetRandomPositionInThis
            • KeepThisInsideOf
            • LastMoveCollisionReposition
            • Left
            • RepositionDirections
          • Capsule2D
          • Circle
            • CollideAgainst
            • CollideAgainstBounce
            • CollideAgainstMove
            • IsPointInside
            • LastCollisionTangent
            • LastMoveCollisionReposition
            • ProjectParentVelocityOnLastMoveCollisionTangent
            • Visible
            • Z
          • Colliding a List of Shapes Against Itself
          • FloatRectangle
          • ICollidable
          • IScalable
            • Scale
          • Line
            • Color
            • LastCollisionPoint
            • RelativePoint1
            • SetFromAbsoluteEndpoints
          • Point
          • Polygon
            • AbsolutePointPosition
            • Clone
            • CollideAgainstBounce
            • CollideAgainstMove and Attachments
            • CollideAgainstMove
            • Color
            • CreateEquilateral
            • CreateRectangle
            • ForceUpdateDependencies
            • IsPointInside
            • LastMoveCollisionReposition
            • OptimizeRadius
            • Points
            • Position
            • ProjectParentVelocityOnLastMoveCollisionTangent
            • ScaleBy
            • Thin Polygon Problem
            • VectorFrom
            • Visible
            • Z
          • Segment
            • ClosestPointTo
          • Shape
          • ShapeCollection
            • AttachTo
            • AxisAlignedRectangles
            • CollideAgainst
            • CollideAgainstBounceWithoutSnag
            • CollideAgainstMove
            • CollideAgainstMoveWithoutSnag
            • LastCollisionAxisAlignedRectangles
            • SortAscending
            • Visible
          • ShapeManager
            • AddToLayer
            • Remove
            • ShapeDrawingOrder
          • ShapeMerger
          • Shapes and 2D Collision
          • Sphere
        • IAttachable
          • Attachment Updates in the Engine
          • Detach
          • ParentRotationChangesPosition
          • ParentRotationChangesRotation
          • TopParent
        • IRotatable
          • RotationMatrix
        • MathFunctions
          • AbsoluteToWindow
          • AngleToAngle
          • AngleToVector
          • GetPointInCircle
          • GetPositionAfterTime
          • RegulatAngle
          • RotatePointAroundPoint
          • RoundFloat
          • RoundToInt
          • WidowToAbsolute
        • Paths
          • Path
        • PositionedObjectList
          • Add
          • AttachTo
          • Clear
          • GetFirstAfter
          • GetFirstAfterPosition
          • SortXInsertionAscending
        • Splines
          • Spline
            • GetPositionAtLengthAlongSpline
      • Performance
        • Measurement
          • Section
            • GetAndStartContextAndTime
            • Save
            • ToStringVerbose
      • PositionedObject
        • Acceleration
        • AttachTo
        • Children
        • Clone
        • Drag
        • ForceUpdatedependencies
        • ForceUpdatedependenciesDeep
        • Initialize
        • KeepTrackOfReal
        • LastPosition
        • Mirrored properties
        • ParentRotationChangesPosition
        • ParentRotationChangesRotation
        • Position
        • RelativePosition
        • RelativeRotationZ
        • RelativeVelocity
        • RemoveSelfFromListsBelongingTo
        • RotationZ
        • SetRelativeFromAbsolute
        • TimedActivity
        • TopParent
        • UpdateDependencies
        • Velocity
        • Z
      • Screens
        • Screen
          • ContentManagerName
          • CustomDestroy
          • IsActivityFinished
          • MoveToScreen
          • PauseThisScreen
        • ScreenManager
          • Activity
          • CurrentScreen
          • Start
      • Sprite
        • Alpha
        • AnimateSelf
        • AnimationChains
        • AnimationSpeed
        • Bottom
        • BottomTextureCoordinate
        • Changing a Sprite's Origin
        • ColorOperation
        • CurrentChainName
        • CurrentFrameIndex
        • IgnoreAnimationChainTextureFlip
        • Inheriting from the Sprite Class
        • JustCycled
        • LeftTextureCoordinate
        • PixelSize
        • Position
        • RightTextureCoordinate
        • SetAnimationChain
        • SetScaleXRatioToY
        • Sorting and Overlapping
        • Sprite vs Texture2d
        • Texture Coordinates
        • Texture
        • TextureAddressMode
        • TextureCoordinate
        • TextureFilter
        • TextureScale
        • TimeIntoAnimation
        • TopTextureCoordinate
        • UseAnimationRelativePosition
        • Vertices
        • VerticesForDrawing
        • Visible
      • SpriteList
      • SpriteManager
        • AddDrawableBatch
        • AddManagedInvisibleSprite
        • AddManualSprite
        • AddParticleSprite
        • AddPositionedObject
        • AddSprite
        • AddToLayer
        • AddZBufferedDrawableBatch
        • AddZBufferedSprite
        • AutomaticallyUpdatedSprites
        • Camera
        • ConvertToAutomaticallyUpdated
        • ConvertToManagedInvisible
        • ConvertToManuallyUpdated
        • ConvertToZBufferedSprite
        • DrawableBatches
        • ManagedPositionedObjects
        • ManualUpdate
        • MaxParticleCount
        • MoveToBack
        • OrderedSortType
          • Z
        • OrderedSprites
        • RemoveDrawableBatch
        • RemoveLayer
        • RemovePositionedObject
        • RemoveSprite
        • RemoveSpriteOneWay
        • SortTexturesSecondary
        • SortYSpritesSecondary
        • UnderAllDrawnLayer
      • TimeManager
        • Accumulating Time
        • CurrentScreenSecondsSince
        • CurrentTime
        • Profiling
        • SecondDifference
        • SecondsSince
        • SumTimeSection
        • SystemCurrentTime
        • TimeFactor
        • Working with TimeSpan
      • Utilities
        • StringFunctions
    • FlatRedBall.Forms
      • Controls
        • Button
        • CheckBox
        • ComboBox
        • FrameworkElement
          • DefaultFormsComponents
          • HandleTab
          • Show
          • Visual
        • Games
          • DialogBox
          • OnScreenKeyboard
          • SettingsView
        • ListBox
        • ListBoxItem
        • RadioButton
        • ScrollBar
        • ScrollViewer
        • Slider
        • StackPanel
        • TextBox
        • TreeView
        • TreeViewItem
      • MVVM
        • DependsOnAttribute
    • FlatRedBall Editor Plugin
      • customvariable
      • Introduction
      • flatredball-glue-elements-objectfinder
      • flatredball-glue-guidisplay-propertygriddisplayer
      • Introduction
      • flatredball-glue-projectmanager
      • Introduction
      • flatredball-glue-saveclasses-namedobjectsave
      • flatredball-glue-saveclasses-referencedfilesave
      • flatredball-glue
        • plugins
          • flatredball-glue-exportedinterfaces-igluestate
          • flatredball-glue-exportedinterfaces-igluxcommands-addreferencedfiletoglobalcontent
          • flatredball-glue-exportedinterfaces-igluxcommands
          • Introduction
          • flatredball-glue-exportedinterfaces-iprojectcommands-makeabsolute
          • flatredball-glue-exportedinterfaces-iprojectcommands
          • flatredball-glue-interfaces-icodegeneratorplugin
          • flatredball-glue-interfaces-imenustripplugin
          • Introduction
          • flatredball-glue-pluginbase-getfilesreferencedby
          • flatredball-glue-pluginbase
          • Introduction
        • vshelpers
          • codebuilditemadder
    • FlatRedBall Editor (Glue)
      • AssetTypeInfo
      • Cleaning Up Screens
      • CodeGeneration
        • ICodeBlock
      • CustomActivity
      • CustomLoadStaticContent
      • Entity
        • Introduction
        • glue-reference-entities-destroy
      • Game1CodeGenerator
      • GetFile
      • PauseThisScreen
      • SaveClasses
        • GlueSettingsSave
      • Screen
        • glue-reference-screens-pauseadjustedsecondssince
    • Live Edit
      • EditorVisuals
        • Circle
        • Text
      • Instance Creation
    • Gum Runtime
      • GraphicalUiElement
        • GetAbsoluteLeft
        • GetGraphicalUiElementByName
        • HasCursorover
        • InterpolateBetween
        • InterpolateTo
        • MoveToFrbLayer
        • RaiseChildrenEventsOutsideOfBounds
        • SetProperty
        • ShowLineRectangles
        • TestCollision
      • RenderingLibrary
        • camera
        • ipositionedsizedobject
        • graphics
          • Layer
          • text
            • textrenderingmode
    • iOS
      • uikit-uiviewcontroller
    • Microsoft.Xna.Framework
      • Audio
        • SoundEffect
        • SoundEffectInstance
      • Color
      • Introduction
      • Game
        • IsActive
        • IsFixedTimeStep
        • IsMouseVisible
        • TargetElapsedTime
      • GameWindow
        • Introduction
        • Introduction
        • handle
      • Graphics
        • Shared Parameters
        • model
        • spritebatch
        • GraphicsDevice
          • renderstate
          • SetRenderTarget
        • renderstate
          • referencealpha
        • Texture2D
          • Creating New Textures Programatically
      • GraphicsDeviceManager
        • supportedorientations
      • Media
        • MediaPlayer
        • Song
          • FromUri
      • Vector3
    • NAudio
      • NAudio_Song
    • SkiaGum
      • SkiaSpriteCanvas
      • Renderables
        • RenderableSkiaObject
    • State Interpolation
      • Tween
      • Tweener
      • TweenerManager
  • 🏘️Contributing
    • How to Contribute
    • Builds (Releases)
      • Gum
    • Writing Documentation
    • Contributing Code (Pull Requests)
    • Automated Test Project
    • Programming Style Guide
  • 🎮FlatRedBall Games
    • angry-boy
    • avatar-skate
    • avatar-word-wave
    • bobble-biker
    • box-the-gopher
    • cargo-crush
    • combo-red-moon-rising
    • cubism
    • eat-my-shuriken-and-die
    • elemento
    • food-battler
    • free-towels
    • gravi-dot
    • hyperdodge
    • juice-factory
    • operation-sd-space-defense
    • picture-puzzle-revolution
    • prismatic
    • quarantine
    • quest-for-freshness
    • star-stepper
    • steambirds
    • sticky-bump
    • tile-trip
    • trashman
    • tumble-heads
    • udder-chaos
    • without-escape
    • games-oniro
  • 🔴FlatRedBall Logo
  • Installing XNA in Visual Studio 2017
Powered by GitBook
On this page
  • Introduction
  • What does "DrawableBatch" mean anyway?
  • Setting up a project
  • Writing Code

Was this helpful?

Edit on GitHub
Export as PDF
  1. Tiled
  2. MapDrawableBatch

AddTile

PreviousMapDrawableBatchNextCoordinateAdjustment

Last updated 1 year ago

Was this helpful?

Introduction

The MapDrawableBatch class is the heart of the Tile Graphics Plugin. It is ultimately the class responsible for rendering the tile map graphics when your game runs. Although the Tile Graphics Plugin provides ways to construct MapDrawableBatches from .scnx files, the MapDrawableBatch can also be constructed purely in code. While this does require some code, working with the MapDrawableBatch class is actually very easy.

What does "DrawableBatch" mean anyway?

The name MapDrawableBatch comes from the fact that it's usually used for tile maps, and it implements the FlatRedBall IDrawableBatch interface. The IDrawableBatch interface allows classes to implement completely custom rendering code using XNA, yet the result of the rendering will still be properly sorted with other FRB objects. The result is that the rendering code appears to be fully integrated into FRB despite being completely custom. If you are interested in more info on IDrawableBatch, see the IDrawableBatch page.

Setting up a project

The MapDrawableBatch class works very well in Screens, but it can also be used in a non-Glue project. If you are not using Glue, make sure to follow the proper initialize/activity/destroy pattern explained here. For simplicity the rest of this article will be written assuming you are using Glue Screens. First you will need to download and install the Tile Graphics Plugin from GlueVault which can be found here. If you are not using Glue, but instead doing everything with pure code, you can download all of the .cs files from here: http://www.flatredball.com/FlatRedBallAddOns/Trunk/FlatRedBall.TileGraphics/FlatRedBall.TileGraphics/. Next you will need to create or open a Glue project. Doing so after the the Tile Graphics Plugin has been installed will automatically add the appropriate classes to your code. Once you have a project created, you can verify the Tile graphics Plugin is installed and that it has properly modified your project by checking the project in Visual Studio. You should have a TileGraphics folder in your project.

The next step is to add a Screen to your Glue project. This Screen will also need to contain a .png (any will do). We will be using this .png file in code. For more information on how to add files to your Screen, and how to access files in code, see this page.

Writing Code

Now that we have a project set up and we have a file that is available to be used, we can create our map. The first step is to create an instance in our GameScreen:

  • Open your project in Visual Studio

  • Navigate to your Screen class's .cs file (the custom code file)

  • Add the following code inside your GameScreen class but outside of any function:

FlatRedBall.TileGraphics.MapDrawableBatch mMap;

Next we'll initialize our class. First I'll present the code, then break apart what each piece means. The full code is:

SpriteManager.Camera.UsePixelCoordinates();

int numberOfTilesWide = 32;
int numberOfTilesHigh = 32;
int spriteSheetCellWidth = 16;
int spriteSheetCellHeight = 16;

mMap = new FlatRedBall.TileGraphics.MapDrawableBatch(
    numberOfTilesWide * numberOfTilesHigh, 
    spriteSheetCellWidth, 
    spriteSheetCellHeight, Slug);

for (int x = 0; x < numberOfTilesWide; x++)
{
    for (int y = 0; y < numberOfTilesHigh; y++)
    {
        Vector3 bottomLeftPoint = new Vector3(
            x * spriteSheetCellWidth,
            y * spriteSheetCellHeight, 
            0);

        int cellLeft = 0;
        int cellTop = 0;
        int cellRight = cellLeft + spriteSheetCellWidth;
        int cellBottom = cellTop + spriteSheetCellHeight;

        mMap.AddTile(bottomLeftPoint, new Vector2(spriteSheetCellWidth, spriteSheetCellHeight),
            cellLeft, cellTop, cellRight, cellBottom);
    }
}
mMap.AddToManagers();

Let's look at each section and see what it means:

SpriteManager.Camera.UsePixelCoordinates();

The UsePixelCoordinates code is responsible for putting our Camera in "2D mode". For more information, see this page.

int numberOfTilesWide = 32;
int numberOfTilesHigh = 32;
int spriteSheetCellWidth = 16;
int spriteSheetCellHeight = 16;

mMap = new FlatRedBall.TileGraphics.MapDrawableBatch(
    numberOfTilesWide * numberOfTilesHigh, 
    spriteSheetCellWidth, 
    spriteSheetCellHeight, Slug);

This code creates an instance of the MapDrawableBatch. Here we specify the number of tiles we want in our map. We are specifying it as 32 x 32. Keep in mind that increasing the dimensions will increase the number of tiles much faster. For example if your map is 32 tall and 32 wide, then it will include 32x32 = 1024. However, increasing to 64x64 results in 4096 tiles. While a 4096 map will usually render without any performance slowdown, it is possible to get to very large numbers very quickly, so you will want to run performance tests on your target platforms for the size of map you are interested in creating. Next we specify the size in pixels of how big our cells on our sprite sheet (the texture used by our tile map) will be. For example, consider the following image to show how big the cells are in a sprite sheet:

In this example the size of the sprite sheet cell is 16 by 16 pixels. My image happens to be 16 by 16 pixels so there is only one cell in the sprite sheet.

for (int x = 0; x < numberOfTilesWide; x++)
{
    for (int y = 0; y < numberOfTilesWide; y++)
    {
        Vector3 bottomLeftPoint = new Vector3(
            x * spriteSheetCellWidth,
            y * spriteSheetCellHeight, 
            0);

        int cellLeft = 0;
        int cellTop = 0;
        int cellRight = cellLeft + spriteSheetCellWidth;
        int cellBottom = cellTop + spriteSheetCellHeight;
 
        mMap.AddTile(bottomLeftPoint, new Vector2(spriteSheetCellWidth, spriteSheetCellHeight),
            cellLeft, cellTop, cellRight, cellBottom);
    }
}

This line of code creates each cell. Each cell needs to know 3 pieces of information:

  1. The bottom-left corner of the tile in world coordinates.

  2. The width and height of the tile. This will usually match the size of the cells.

  3. The top, bottom, left, and right pixels of the cell to use. In this case we are rendering the entire sprite sheet, so we use 0 - 16.

mMap.AddToManagers();

The AddToManagers call adds the MapDrawableBatch to the engine. In other words, once this call is made the MapDrawableBatch will be rendered to the screen when your game runs:

TileGraphicsInSolutionExplorer.png
SpriteSheetCellWidth.png