Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 16 Oct 2013
Online Last Active Today, 02:32 AM

#5175225 DeltaTime and acceleration

Posted by Lactose! on 21 August 2014 - 04:37 AM

Any Idea on what should be really done ?

The solution is to fix your timestep.

This will keep deltaTime consistent across multiple machines, meaning all calculations using it end up the same.

#5175037 Strange output when writing to a file object and printing it out

Posted by Lactose! on 20 August 2014 - 09:55 AM

We can't know if you're ready for the next tutorial or not.

If you feel like you understand all/most of the stuff that's been gone through so far in the tutorials, I would suggest moving forward.

If you feel there are things you don't understand completely, or things that you're uncertain about, I would suggest taking a closer look at those things, before you move on to the next tutorial.


In the end, that's a choice you'll have to make on your own.

#5175012 Am I obliged to create one?

Posted by Lactose! on 20 August 2014 - 08:46 AM

No one will expect you to create your own solutions if the existing ones are good enough for what you want to do.


If you have special reasons for creating or modifying something, then go for it. This can include "because I want to/for learning purposes".

Most people are more than happy with using the software you mentioned to create art assets for their games.


A lot of people (especially smaller studios) are also happy with using engines or frameworks (examples including Unity, Unreal Engine, GameMaker, etc.). If your goal is to create a game, then that should be your main priority.


Basically, it's like if you want to become a pro-cyclist. Your main goal would be learning how to cycle really fast, not worry about if you need to build your own bike.

#5174969 Best way to traverse a 2d array to dertermine the winner in Tic-Tac-Toe

Posted by Lactose! on 20 August 2014 - 05:24 AM

Also, even if you don't understand it all right now, it can still be used as a reference later on.

And it might help others who just lurk or happen to google the same problem.

#5174869 Apparently, no so simple Math.....

Posted by Lactose! on 19 August 2014 - 04:47 PM

All very nice! I do have one question. In this line of code right at the bottom, what is the 1 for? I get that we are trying to always do atleast 1 damage, but does that effect the code if normal damage is done? 


int x = max(attack - defense, 1);
is equivalent to
int x = attack - defense;
if (x < 1)
    x = 1;

#5174861 Apparently, no so simple Math.....

Posted by Lactose! on 19 August 2014 - 04:24 PM

It could also easily be non-UI related. E.g. every time you block all damage 4 times in a row, gain double damage for next attack. Do counter related things inside the if/else blocks. Just to continue the derail a bit.


But we both know you're just typing stuff here to avoid coding!

#5174856 Apparently, no so simple Math.....

Posted by Lactose! on 19 August 2014 - 04:18 PM

I see your min/max ops and raise you blocking logic!


int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;
    Console.WriteLine("Attack blocked!");

#5174845 Apparently, no so simple Math.....

Posted by Lactose! on 19 August 2014 - 03:42 PM

Something like this should do the trick:

int damageTaken = attack - defense;
if (damageTaken > 0)
    health -= damageTaken;

#5174832 storing level data

Posted by Lactose! on 19 August 2014 - 03:03 PM

Tiled level layouts do not mean movement has to be from tile to tile. You can still have positions stored as float, and adjust position gradually within a tile, without having to snap to up/left/right/down tiles on movement.


In a topdown (non-isometric) level, with each tile being e.g. 128x156 pixels in size, you can move around as if the level weren't tiled. You can, however, use the tile system to figure out e.g. collisions.

Using some simple math you can figure out which tile you're standing on, and only check for collisions or whatever in tiles that are adjacent (or otherwise interesting).

In this case, you could figure out the tile by using pos.x / 128 and pos.y / 156.


This also works for isometric layouts, but the math is (slightly) more involved.

#5174524 Help me, i can't understand well :)

Posted by Lactose! on 18 August 2014 - 01:57 PM

You seem to be having problems with all the code in the tutorial you are following. Have you considered slowing down and going through it more thoroughly? Even if that means taking longer, or even going back a few steps, I'm fairly certain you would benefit from it in the long run.

Alternatively, supplement your reading with an additional tutorial or something similar?


That said, I agree with cavendert -- it's impossible for us to guess at what you don't understand if you don't tell us. If there is something you don't understand, state explicitly what it is. If you get errors, state what you expect to happen, and what happens instead. If there are errors listed, include them so we can help out.

#5174165 How do I achieve these type of Graphics?

Posted by Lactose! on 16 August 2014 - 05:01 PM

Draw the art in a program of your choosing.

Put the art into a suitable game engine.

#5173714 Animation Plays, Character Stays In Place

Posted by Lactose! on 14 August 2014 - 03:59 PM

That sounds like you set position to 0 somewhere in the code you haven't posted.


You're also doing some very strange things here, indicating you might want to slow down and be a bit more thorough. For example, you have a lot of gPlayer.XPos = gPlayer.XPos; which changes nothing. This to me suggests that you might want to clean up your code a bit -- it might even help you fix some bugs you have in the process.

#5173707 Animation Plays, Character Stays In Place

Posted by Lactose! on 14 August 2014 - 03:46 PM

Except for initialization, you never set the velocities to a non-zero value. This is also a place where it doesn't make sense to initialize it.

Upon key release, you do set the velocoties to zero.


In addition, a likely issue is also that your position variables are int, and your DeltaTime variable might be a float with value equal to something like 0.016.

If so, the velocity * DeltaTime code will be cast into an int that's zero (unless your velocities are very large), meaning no position change.


You'll need to have your position values as type float, to be able to move in most velocities.

If you need the position in ints due to rendering positions and such, you can cast it from float to int when you need it,

#5173410 Crashes When Character Walks

Posted by Lactose! on 13 August 2014 - 12:50 PM

gPlayer.CurrentFrame = 0x00000008 means gPlayer.CurrentFrame is equal to hexadecimal (hex) 8. Hex 8 is equal to 8 in our normal counting system as well. You might want to brush up on hexadecimal numbers if this is new to you. You might also have the option to turn off hex display of values in your IDE, which can make some values easier to read (although some numbers are easier to read in hex in certain contexts).


This means, as I guessed, that you're indexing into the array which has size 8 (and maximum index 7) with the invalid index 8.

The cause is also what I guessed, the appropriate "facing/idle" if checks are always executed, even when the player is moving. This causes the gPlayer.CurrentFrame value to increment (although in a strange matter, which I also touched on in the previous post), up to 8.

After the facing/idle checks, you do the movement anim checks. This part will simply explode if gPlayer.CurrentFrame is 8, and as we see above, it clearly can be.


A simple way to verify (verifying is not fixing) this would be to put the gPlayer.CurrentFrame = SDL_GetTicks() / 150 % 8 (or 9) stuff directly before the SDL_RenderCopy calls, forcing the gPlayer.CurrentFrame value to be valid before you use it.


It should no longer crash, but your code should still be fixed properly. I'd recommend trying to find a tutorial or similar for this. The way you're doing animations and drawing now doesn't really work well for a game, in my opinion.

#5173308 Crashes When Character Walks

Posted by Lactose! on 13 August 2014 - 04:50 AM

Print the value of gPlayer.CurrentFrame (right before each RenderCopy call) so you can see in a log/output window what the last value is.

You could also hover the variable when the application crashes, to see its value. This might be IDE specific, but the ones I know about support this.


You're only posting snippets, which makes it impossible to guess the overall flow of the thing, but if the last code you posted is directly copied, I think i see the reason for it, plus some other issues:

gPlayer.CurrentFrame = SDL_GetTicks() / 150 % 8; //Also in the facing code, with the % 9

You first increment the frame by one, but this is a complete waste. The very next line you set the variable directly, overwriting the increment operation.

gPlayer.CurrentFrame = SDL_GetTicks() / 150 % 8;
if (gPlayer.CurrentFrame >= 8)
// ...

If I'm reading this correctly (I can't recall the operator precedence rules here), this if will never trigger.

I'm reading it as equivalent to (SDL_GetTicks() / 150) % 8, which means that the result will always be between (and including) 0 and 7. Your if check checks for 8 and higher, which is never true.

if (gPlayer.Facing == gPlayer.RIGHT)
if (gPlayer.CurrentState == gPlayer.WALK_LEFT)
//Stuff that crashes

I'm assuming you also have a facing == gPlayer.LEFT somewhere. If you actually execute the facing (idle?) drawing always, and the overwrite with the walking animation, this will result in out of bounds reading.

The % 9 in the facing/idle code will make gPlayer.CurrentFrame be between (and including) 0 and 8. If it's set to 8, and then the walking animation code is run directly after, you will be indexing into your 8 large array (with max valid index = 7) with the invalid index 

--> Crash, access violation.