Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

102 Neutral


About kostile

  • Rank

Personal Information

  • Role
  • Interests

Recent Profile Visitors

2480 profile views
  1. Hey sorry for the delayed response. The game does use graphics shaders so it will require a GPU or else I'm not sure if it will run properly. I am optimizing it currently so that lower end devices with a low end GPU can still run it well. I had hoped to have this project finished a while ago, but it seems it just keeps dragging on. https://gamedevelopment.tutsplus.com/tutorials/make-a-neon-vector-shooter-in-xna-the-warping-grid--gamedev-9904 I use something akin to this for the warp grid.
  2. I've enjoyed using C# and monogame/xna to develop independently, and if you are looking for a good starting point without having to spend a ton of money on books, then check this out http://www.introprogramming.info/english-intro-csharp-book/ I've gone through it and it teaches quite a bit about the fundamentals of programming, but if you are planning on using Unity then it may be overkill to learn so much about the fundamentals.
  3. I am excited to say that I have gotten a bit of work done on Dystopian Lights recently and also excited to see that people are downloading it and trying it out on their android devices. I haven't received any feedback yet, and please don't hesitate to give any critique or suggestions. I am really open to everything as this is my first serious project that I think has any validity of professionalism in it, and I really would like to see it succeed. I do have a few updates for you guys and will have a new version ready for download by this weekend, but here is the new stuff I've been working on. 1. Capacitor I have enjoyed playing shooter games on mobile devices but many of the free to play or inexpensive ones all do something similar with their weapons schemes. Generally you select a ship and it has specific weapons with it, or you toggle on and off the different weapons you have while only being able to shoot one weapon at a time. Since I am such a fan of the chaos and destruction in these games I was trying to come up with a good way to enable the player to have all weapons active at the same time without it being too overpowered. My solution is a capacitor. Your regenerate energy every second and certain weapons use more energy than others. When your energy is depleted, you can only use your basic shot. With this enhancement to the game, it has given it a new level of customizability and even greater balance. It has also given rise to new ideas that will be implemented before I release the next version which should be before the end of the month. You can still toggle off and on your weapons in order to control your capacitor usage, or you can just watch it drain and toggle off automatically and wait for it to regenerate. Small disclaimer: The grid is not as detailed in the android version as it appears in this image 2. Health Packs One thing that was missing from the game was the ability to heal after you have taken damage. Since there should be ample amounts of chaos, then you should really be able to heal after all the damage that you have taken. Each enemy now has a 10% chance to drop a health pack on death. Another way to heal right now is to level up. When you level up you heal fully. This may change in the future as it does seem a bit overpowered and throws the balance of the game off quite a bit. 3. Balance I am working on balancing things in the game to make it feel like you get a good amount of time of play before you die and where your skill can extend that time substantially if you are good at dodging and killing things. This is no easy task and I imagine balancing changes will continue from here on out until the full game is released. Some of the changes are the required points you need to level up each time. It's a simple algorithm and can be easily extended to add more balance later if needed. Besides just the points required for leveling be updated, I have also changed around some of the spawning algorithm. Spawning happens in two forms in this game. There are random spawns, and pattern spawns. With the random spawning, a random enemy that falls within the level range of the current players level will spawn at a random location within the bounds of the game and outside of the hit radius of the player. The other form is the patterns. A pattern is randomly selected based on a few conditions and will spawn around the player. Usually it will appear as a circle or triangle. The pattern spawn will be forced every 15 seconds or so, sometimes exceeding the max enemies a player would see at the given level of random enemies, but is still limited. This form still uses the same algorithm for enemy selection, which is something that I need to revisit as the enemy selection favors higher level enemies the higher level the player is and scales at a very unbalanced rate. Future Updates to Come Some of the changes I hope to have finished for my update this month will be more upgrades. For one, I will probably make the shot weapon the default weapon, and then the missile and laser will have to be unlocked with points which can be further upgraded. The missiles will have an option to increase amount fired at a time. The laser will have options for increasing damage, length, and capacitor efficiency. The player will have a new upgrade for max capacitor and I will also be making a lot more balancing changes. I would like to start adding sound effects in the game soon and already have a system designed and implemented for sound effects and music. It will add a nice touch and probably make the ambiance of the game a lot better. Another thing I would like to add is some different sprites for certain tiers of weapon upgrades. It looks very static at this moment and if your weapon projectile changes every 3 to 4 points spent, it could add a nice touch. The player ship will also change here in the very near future. One thing that I have been meaning to work on is a turret sprite for each weapon. Right now it only exists for the laser as you can see in the picture above but even then it is not as dynamic as I would like. For instance, with the shot weapon, you might have 5 waves coming and having a single static image might not be the pleasing to look at as it will not match up properly as one would expect. This might mean creating a lot of different images for each different combination of weapon and the count of the projectile that each weapon has but this would add an exponential amount of work to do. In order to minimize this work, I might procedurally generate a turret sprite based on what weapon is active. The system might take some time, but then I would only have to make a few images that are spliced together based on the procedural system rather than creating 500 images for different combinations of weapons and weapon levels. Some Code: Something I wanted to share with everyone was the code that I use for my health bar and the capacitor energy bar. With this code you will notice that there are 2 draw methods that are being utilized. That is due to the nature of the game and it's post processing to achieve the glow effect. The PercentBar.Draw() method will draw the darker lines that you see inside of the health and capacitor bars, whereas the background is the DrawPostProcessed. This is probably a poor name for the method as it's not post processing anything, it could be renamed to DrawLines and DrawBackround for a better naming convention but this works for me since I am just trying to distinguish between what is post processed for the glow effects and what is not. The parameters foregroundColor and backgroundColor are optional and will default to green and red, which is what the health bar uses, but you can also make the foreground color anything that you choose as well as the background color. If you give the backgroundColor a 0 alpha value then it will just look like the bar is shrinking if it decreases in size or will look like it is growing if it is increased. This PercentBar class can be used to represent any kind of percentage that you want to display such as health, energy, or even a loading bar. public class PercentBar { private float width; private float height; private Color backgroundColor; private Color foregroundColor; private Vector2 location; private float percentShown; public PercentBar(float width, float height, Vector2 location, Color? foregroundColor = null, Color? backgroundColor = null) { this.width = width; this.height = height; this.location = location; this.backgroundColor = backgroundColor ?? Color.Red * 0.6f; this.foregroundColor = foregroundColor ?? Color.Green * 0.6f; percentShown = 1; } public void updatPercent(float current, float max) { percentShown = (current / max); } public void Draw(SpriteBatch spriteBatch) { float segmentSpacing = 4; float segmentWidth = 2; float segments = width * (percentShown) / segmentSpacing; for (int i = 0; i < segments - 2; i++) { spriteBatch.Draw(Primitives.line, new Vector2(location.X + (i * segmentSpacing), location.Y), scale: new Vector2(segmentWidth, height), color: foregroundColor); } } public void DrawPostProcessed(SpriteBatch spriteBatch) { spriteBatch.Draw(Primitives.line, new Vector2(location.X - 5, location.Y - height * 0.25f), color: foregroundColor, scale: new Vector2(width * percentShown, height * 1.45f)); spriteBatch.Draw(Primitives.line, new Vector2(width * percentShown + (location.X - 5), location.Y - height * 0.25f), color: backgroundColor, scale: new Vector2(Math.Abs(width * percentShown - width), height * 1.45f)); } public float PercentShown { get { return percentShown; } set { percentShown = value; } } public float Width { get {return width; } } public Vector2 Location { get { return location; } } }
  4. So to start the day I am going to share with you guys how I use touch controls and touch "joysticks" in Dystopian Lights (previously Neon Android) to control movement and crosshair aim. Initially I had a floating joystick system where you would tap and hold in a certain area but the response to that system has been heavily negative, so I have redone the code running the joysticks and with refactoring I have made them static as well as extremely reusable. This code is tested in monogame for android and should work for iOS as well if you are using the mono and the monogame framework. What I wasn't aware of when I wrote my first joysticks, is that monogame has a cool feature for touchlocation IDs that allows for greater control without having to worry about which touch is which, we already know if we assign it an ID on touch. You can view the code and use however you want if you decide you like it. If you have ever used monogame and you look at the scaling in the draw method, you will notice that I multiply the scale by 0.001f. This is because the Primitives.circle texture has a radius of 500. There may be some other oddities in the code, if you do use it and have any questions, don't hesitate to ask. The code is at the end of the blog. So this is one of the updates for the game, as well as a proper title. I have been developing the game under a working title "Neon Android" for quite some time but I have always known that this isn't going to fly as the actual title of the game. Dystopian Lights rang a good bell for me when thinking about how I want the game portrayed. For now it sits as a very similar, almost clone of, Geometry Wars. This is intended for art and play style to some degree, but with many varying factors I think the two games will stand far apart from one another once Dystopian Lights is a finished product. One of the other upcoming changes for the game is the change in the GUI. It has been heavily improved on mobile platforms. Previously the GUI was tiny and fit for a computer, but now it looks okay on Android and you can actually navigate the menus when upgrading your weapons. Also I have changed the buttons for weapon selection to be highlighted when selected so you actually know what's firing without having to pay attention to your projectile. So from here, the plan is to release an update on my website by this Friday, which will include the changes I have showcased here as well as a few other minor changes. Right now the game is only available on Android and is available for download from my website, https://solumgames.com so please head there if you want to check it out. I will have more Dev Blogs in the future and hope to do a minimum of one a week until the end of the year, when I will release it on the Android app market and then see about working for a PC release. The largest problem I have encountered so far while developing this game is the spawning pattern. If anyone has any recommendations for setting up a spawner that gets infinitely more difficult, please feel free to give your input. I have a system right now that works, but its scaling is terrible and it feels like end game within about 5 minutes. There is some obvious tweaking and balancing that I still need to work out as well, so if anyone trys the game and would enjoy something being different, feel free to let me know what I should change. Some of the ideas I have for the future of the game will be to include a story mode. My thoughts keep going around to scripted spawns, and then some animations with full screen-width chat boxes that show an avatar of the character speaking. There will be at least a few boss fights and some over the top story that would make this game seem like a space opera straight out of the cheesiest movie you have ever seen on the Sci-Fi network. I have also been working out this idea where your player has a capacitor that can only sustain so many weapons for so long. If I do add it, the shot weapon will probably always be available, when you use your missile and laser in tandem with something else, depending on your capacitor recharge rate and max capacitor, you will run out of energy which will cause your capacitor to short and then the only weapon available until it fully recharges will be the shot weapon. Health packs are coming as well. They will be random drops from enemies and they will heal different amounts based on the enemy killed. So far I am happy to see that I have about 40 downloads of the game just from my website alone. I have not received any feedback from any users of the software that I don't know, so please if you are downloading it, speak up with any critique or recommendations. I would love to hear, the good, the bad, and the ugly. public class Joystick { private Vector2 outerLocation; private Vector2 innerLocation; private Vector2 direction; private Color innerColor = new Color(0.2f, 0.2f, 0.2f, .5f); private Color outerColor = new Color(.5f, .5f, .5f, .5f); private float innerRadiusRatio; private float outerRadius; private int touchId; public Joystick(Vector2 location, int radius) { outerLocation = location; innerLocation = location; outerRadius = radius; innerRadiusRatio = 0.3f; } public Vector2 Direction { get { return direction; } } public void Update(TouchCollection touchCollection) { foreach (TouchLocation tl in touchCollection) { if (tl.State == TouchLocationState.Pressed) { if (AOneMath.Distance(outerLocation.X, tl.Position.X, outerLocation.Y, tl.Position.Y) <= outerRadius) { touchId = tl.Id; } } if (touchId != tl.Id) { continue; } if (tl.State == TouchLocationState.Moved) { float dirX = tl.Position.X - outerLocation.X; float dirY = tl.Position.Y - outerLocation.Y; direction.X = dirX; direction.Y = dirY; direction.Normalize(); float length = AOneMath.Distance(tl.Position.X, outerLocation.X, tl.Position.Y, outerLocation.Y); if (length > outerRadius - outerRadius * 0.5f) { length = outerRadius - outerRadius * 0.5f; } innerLocation.X = outerLocation.X + direction.X * length; innerLocation.Y = outerLocation.Y + direction.Y * length; } if (tl.State == TouchLocationState.Released) { innerLocation = outerLocation; direction.X = 0; direction.Y = 0; } } } public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw(Primitives.circle, position: Vector2.Subtract(outerLocation, new Vector2(outerRadius / 2, outerRadius / 2)), scale: new Vector2(outerRadius * 0.001f, outerRadius * 0.001f), color: innerColor); spriteBatch.Draw(Primitives.circle, position: Vector2.Subtract(innerLocation, new Vector2(outerRadius * innerRadiusRatio / 2, outerRadius * innerRadiusRatio / 2)), scale: new Vector2(outerRadius * innerRadiusRatio * 0.001f, outerRadius * innerRadiusRatio * 0.001f), color: outerColor); } }
  5. kostile

    How to stay motivated?

    I am in the same boat, I can't stay motivated for long periods to keep working on my game projects. It comes in waves for me. I end up developing my game every day for one or 2 weeks on all of my free time, and then stop for about a month. I drink the whole time, its a wonder my game works at all. I really need to stop writing code under the influence. Someone is going to end up in an accident
  6. NeonAndroid: This is a new game that has been in development for quite some time and is still a WIP. It's initialrelease will be for Android followed by a release for Windows and Linux. It is very similar to GeoWars which I'm sure many are familiar with. To download, head to http://solumgames.com This is currently a demo that I am releasing for testing. It should work on most mid range to high end android devices. Some of the things you can expect when playing is infinite play with dynamically scaling difficulty. Enemies will spawn with increasing difficulty and at an increased rate varying upon your score. There are a few enemies with very different behaviors so that it doesn't feel like you are killing The same things that just look different. The shaders in the game add for a very nice and pleasing to look at neon effect. The game is written in C# and uses monogame. It runs pretty well on two devices that I have tested it on, the LG G6 and the LG Nexus 5. There are multiple weapons to choose from. Right now there is no indicator for which weapon you have activated. Tapping the buttons to the left will activate and deactivate each weapon. You can have all weapons running at the same time right now but with future versions, that will likely change. Each weapon type is upgradeable and more upgrades are coming as well. Currently the laser does not have any upgrades. Your are given two points per level. Some upgrades do cost more than one point. If you upgrade your health you will notice that it does not replenish. The GUI is going have a very different theme to it once I release the full version, the buttons are small and the menu tabs are as well. To upgrade your weapons you will select the tab with the corresponding weapon name, tap the + button distribute points and click apply to confirm. You can select the minus to remove points only if you haven't applied them before. There are quite a few known issues that I am working on, but it is in a very playable state. Some things you should be aware of if you decide to test out the game. The controls work by pressing and holding either side of the screen and using the virtual joysticks that appear where you press. The left side will control movement and the right side will control the crosshair. There are sound effects and music but they are disabled as of right now. You can leave the battlefield, You may encounter lag spikes, The difficulty scales very quickly, The Tutorial button on the main menu will not do anything, there may be other minor or major bugs and if you notice one please don't hesitate to inform me.
  7. Just wanted to update you guys that I was able to get an understanding of using a generic set of parameters as an object. I ended up with this. public struct GenerericShapeAttributes { public int Amount; public float Delay; public float Radius; public Vector2 P1; public Vector2 P2; public bool IsCircle; public bool IsLine; public bool IsRandom; public bool IsSpiral; public int MaxIteration { get { return Amount - 1; } } } I moved the SpawnPolyGroup and SpawnGroup to the static class. They both now return arrays of Vector2 and are called GeneratePolygonVectors and GenerateBasicShapeVectors. The static class is now called ShapeBuilder. Only the GenerateBasicShapeVectors function takes the struct as a parameter and depending on which bool is flagged, it will determine which parameters to pass to which function. This will make it much easier to extend in the future with more patterns and logic. Thanks for the help guys and though I know it may not be perfect or pleasing to everyone, I would agree this structure is better and more pleasing to most people than my previous code. I did fix this issue and it took some thinking to get it done. The Line function wasn't the issue, but it was the parameters being passed to it. It did not return the end point but it will now that I have fixed my other functions that call Line. I also realized that I did not have the SpawnPolyGroup functioning correctly either. It "looked" like it was working as I was testing, but I had to change up the loop and the math to get it to account for the extra points that weren't being assigned in the array which would cause an exception if the array was only large enough to hold the amount of points that were actually supposed to be there. Thanks a lot guys
  8. I am reading what you guys are saying, but I don't see how this makes the code any less complex and more readable. The DirectX example I looked at doesn't really shed any light on this either. As I am searching through it seems like this is going to increase the complexity of my code and make it that much more harder to manage. I might not be fully understanding the concept behind what you guys are talking about. I need a way to pick a function to launch at "random" even when the parameters of each function are not identical, otherwise I will end up with extra params in functions that I don't need as placeholders to fit the Func or Delegate. The lines public static Func<int, int, Vector2, Vector2, Vector2> currentPattern = SpawnPatterns.Line SpawnPolyGroup(gameTime, new Vector2(800, 0), 5, 6); are hard coded, but this is not the way it will remain. I guess I should have said that this code was unfinished but I am looking at a way to randomize the information provided where SpawnPatterns.Line might be SpawnPatterns.Circle at one point, and each int and Vector2 will vary in SpawnPolyGroup to some degree once I have finished it, but I can hardly make out how putting the information to these into a struct will add any cleanliness to the code. Instead of using the Func should I just make a switch/case? EDIT: So I did some more thinking and is this what you guys were explaining to me? I have kept the Circle function in another class for now, just posting it like this right now to make it easier to view. public struct Pattern { public int MaxIterations; public float Radius; public Vector2 P1; public Vector2 P2; } public static Vector2 Circle(Pattern pattern, int currentIteration) { float radians = AOneMath.AngleToRadian(360/ pattern.MaxIterations); float x = (float)Math.Cos(radians * currentIteration); float y = (float)Math.Sin(radians * currentIteration); return new Vector2(pattern.P1.X + (x * pattern.Radius), pattern.P1.Y + (y * pattern.Radius)); }
  9. I will have to look into that. I have never tried to use structs for filling parameters. You wouldnt have an example or be able to elaborate a little? This is a totally new idea to me, and i have never thought about using structs for anything really.
  10. Your explanation of good code outlines it really well for me. I will have to revisit a lot of code with these ideas in mind. I'm well on my way of practicing good habits and i appreciate the feedback
  11. I see what you are saying about having params that aren't used but what would be a clean solution to that? The idea was to have the generic Func that i just call through the SpawnGroup function and i can easily change which function is called, either random, line, or circle, but this does end up having functions that use the paremeters differently as well as not using some at all.
  12. Thanks for the critique, I wasn't aware of the PascalCase for public variables convention but I am trying to follow the "standard" convention so that is good to know. I like the recommendations and will do this and continue to do this in the future. I'm am really glad to hear that this isn't terrible because like I said, it is more recent code that I think looks much better than most of my previous.
  13. I really don't know what is considered better or even good for the most part. My code varies and has evolved over the years as a developer and sometimes I think it looks cleaner, but it is never easy to edit or add something. I fight with myself when writing things like particle engines because I know the purpose of a particle engine is to be quick and efficient, but how much overhead is there really just by giving a reference of an emitter to a particle that is contained within it? Why should I write behaviors for particles as functions that return a value vs just writing a function that returns nothing but handles all of the behavior? I feel like with the latter I end up with code that is easier to modify, but it looks terrible. With the previous I end up with very clean code but is god awful to edit as I have one iteration loop that basically controls everything based on the function it is given. Here is some more recent code I have written that I think would be considered "good" but I am really not sure. The gist of this code is that it will spawn an enemy in a pattern that right now is determined by the writer. I will eventually write functions that determine which shape should be spawned when and where, but right now it just will spawn a shape from the SpawnPolyGroup function with 5 enemies per line and 6 lines in the shape. So it makes a hexagon with 5 enemies per line. My question is, is it better to have the SpawnGroup function control the for loop and return values from each SpawnPatterns (being Vector2 as locations), or would it be better to have each function in the SpawnPatterns class have it's own iterative loop? Also, any other tips on my code for cleanliness and professionalism would be great. I am self taught and never had a tutor, but have read a lot about people being self taught writing code that is unprofessional, but I have never reached out for someone to look at my code aside from a few people so I am hoping that I can learn something to be more professional in the future in hopes to find a paying job as a programmer. public static class Spawner { public static bool isSpawning = false; public static float spawnTimer = 0; public static bool groupSpawning = false; public static Dictionary<Enemy, float> delayedSpawnDict = new Dictionary<Enemy, float>(); public static float timeDelta = 0; //Arguments for currentPattern should be (int maxEnemies, int currentIteration, int radius, Vector2 PatternLocation) public static Func<int, int, Vector2, Vector2, Vector2> currentPattern = SpawnPatterns.Line; public static void Update(GameTime gameTime) { if (!isSpawning) { return; } if (timeDelta > 0) { timeDelta -= gameTime.ElapsedGameTime.Milliseconds; } if (timeDelta <= 0 && delayedSpawnDict.Count() > 0) { KeyValuePair<Enemy, float> pair = delayedSpawnDict.ElementAt(0); Enemies.enemies.Add(pair.Key); pair.Key.Spawn(); timeDelta = pair.Value; delayedSpawnDict.Remove(pair.Key); } //If enemies alive is greater than max enemies then do not spawn if (Enemies.enemies.Count + delayedSpawnDict.Count() >= 1) { return; } //Spawn Individual if (spawnTimer >= 500) { SpawnPolyGroup(gameTime, new Vector2(800, 0), 5, 6); spawnTimer = 0; } spawnTimer += gameTime.ElapsedGameTime.Milliseconds; } public static void SpawnGroup(GameTime gameTime, Vector2 location, Vector2 mod1, int amount = 5, float delay = 100) { for (int i = 0; i < amount; i++) { Vector2 enemyLocation = currentPattern(amount, i, mod1, location); if (enemyLocation == default(Vector2)) { return; } Enemy enemy = new Enemy(15, Assets.hollowCircle, enemyLocation, EnemyUtilities.Follow, 500); if (delay > 0) { delayedSpawnDict.Add(enemy, delay); } else { Enemies.enemies.Add(enemy); } } } public static void SpawnPolyGroup(GameTime gameTime, Vector2 location, int amount = 5, int sides = 5) { float radians = AOneMath.AngleToRadian(360 / sides); float rotation = AOneMath.AngleToRadian(90 * (sides % 2)); for (int i = 0; i < sides; i ++) { int distanceFromCenter = 200; float x1 = location.X + (float)Math.Cos(radians * i + rotation) * distanceFromCenter; float y1 = location.Y + (float)Math.Sin(radians * i + rotation) * distanceFromCenter; Vector2 p1 = new Vector2(x1, y1); float x2 = location.X + (float)Math.Cos(radians * (i + 1) + rotation) * distanceFromCenter; float y2 = location.Y + (float)Math.Sin(radians * (i + 1) + rotation) * distanceFromCenter; Vector2 p2 = new Vector2(x2, y2); SpawnGroup(gameTime, p2, p1, amount); } } } public static class SpawnPatterns { /// <param name="radius">Radius, Best to have X and Y the same</param> /// <param name="patternLocation">Center location of circle</param> /// <returns>Enemy location based on current iteration of max from radius to the patternLocation as the center</returns> public static Vector2 Circle(int max, int current, Vector2 radius, Vector2 patternLocation) { float radians = AOneMath.AngleToRadian(360/max); float x = (float)Math.Cos(radians * current); float y = (float)Math.Sin(radians * current); return new Vector2(patternLocation.X + (x * radius.X), patternLocation.Y + (y * radius.Y)); } /// <param name="pointB">The end point where the last enemy should be in the line</param> /// <param name="pointA">The start point where the first enemy should be in the line</param> /// <returns>Enemy location based on current iteration of max from pointA to pointB</returns> public static Vector2 Line(int max, int current, Vector2 pointA, Vector2 pointB) { float x = MathHelper.Lerp(pointA.X, pointB.X, (float)current / (float)max); float y = MathHelper.Lerp(pointA.Y, pointB.Y, (float)current / (float)max); return new Vector2(x, y); } /// <param name="p1">Top left point of area to spawn randomly</param> /// <param name="p2">Bottom right point of area to spawn randomly</param> public static Vector2 Random(int max, int current, Vector2 p1, Vector2 p2) { float x = AOneMath.random.Next((int)p1.X, (int)p2.X); float y = AOneMath.random.Next((int)p1.Y, (int)p2.Y); return new Vector2(x, y); } }
  14. kostile

    What engines do you use, and why

    I have been using the xna and more recently the monogame frameworks. These options provide a high level of code for tasks that i just prefer not to deal with such as image loading, sounds and so forth. With these tools it makes it quick to produce your item engine with as much flexibility that you need. Running in dot net gives out the added bonus of being pretty efficient. I'm not a huge fan of all in one editors such as unity. I feel to separated from the code at times and i feel it takes a much larger learning curve to pick up on a full engine rather than brewing something in house where you only have to focus on the pieces you need. That being dai said i do feel that monogame and mono have some draw backs. I would prefer to do all of my development in Linux and release and compile for Android, linux and Windows but I just came get xamarin.android to compile and work with Linux. Other than that i am very happy with it. I'm surprised i dont see more people using monogame. It's probably the easiest and cleanest framework to use when developing 2D games.
  15. I have been using xna and monogame for a few years now and i am curious about this. Are you able to boast any improvements or anything? Monogame is open source and it seems like this is redundant unless there is some major overhead difference that I'm not aware of.
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!