Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 04 Feb 2008
Offline Last Active Yesterday, 11:46 PM

#5301603 Why didn't somebody tell me?

Posted by fastcall22 on 20 July 2016 - 01:18 PM

If your folder or file is name "StuffAndThings", with out having to click and use the search bar, just start typing "StuffAndThings" (like hitting the key for the first letter of the file to seek to all "s" files) and explorer will eventually land on and highlight the folder or file for you =). This is useful if their are 50 things that start with "S".

Except if the thing you're looking for is first in the list. If you have two folders that begin with the same letter listed first, say "bin" and "bin86", then pressing "b" will select "bin86" first, before "bin". For example, my root drive typically looks like this:

D:\bin → "Program Files"
D:\bin86 → "Program Files (x86)"
And so, if i want to go to "D:\bin\python\35": winkey+E, D:, enter, b, b, enter, python, ...

#5298952 Getting an error while running this program

Posted by fastcall22 on 03 July 2016 - 09:39 PM

It seems the code was written for an older version of Python. Starting with Python 3.0, print changed from a statement to a function. See: What’s New In Python 3.0.

If you are learning Python, then you may consider downgrading to an older version of python.
If you need different versions of python installed side-by-side, then you may consider using a virtual environment.

#5295428 Do you usually prefix your classes with the letter 'C' or something e...

Posted by fastcall22 on 07 June 2016 - 12:08 AM

lowercase_underscores, because I find the extra horizontal space easier to read than CompactPascalCase or compactCamelCase. And makes acronyms, however rare, easier to read: TWAIN_adapter instead of TWAINAdapter (TWAINA dapter?) or TWAINadapter (TWAI Nadapter?)...

I could do Pascal_Case_Underscores, but that’s a little 2crazy4me...

#5295023 Can't Get Bullets to Shoot

Posted by fastcall22 on 04 June 2016 - 07:02 PM

if (event.key.keysym.sym == SDLK_SPACE)
    gBullet.isAlive = true;
    gBullet.Y_Vel = 0.05f;                  // (2)
    gBullet.Y -= gBullet.Y_Vel * DeltaTime; // (1)
    gBullet.Rect.y = (int)gBullet.Y;

This code only moves the bullet (1) a single step, but only after pressing the space bar. Additionally, if these units are in pixels, then the bullet will take 20 seconds to move a single pixel (2). Obviously, the bullet should move regardless of whether of not the space bar was pressed, so it should be updated independently:
// Update time
ThisTime = SDL_GetTicks();
DeltaTime = (float)(ThisTime - LastTime) / MAX_TICKS;
LastTime = ThisTime;

// Process events
SDL_Event ev;
while ( SDL_GetEvent(&ev) )
    // ...

    if (event.key.keysym.sym == SDLK_SPACE)
        gBullet.isAlive = true;
        gBullet.Y_Vel = 300.0f;  // pixels per second

// Update entities
if ( gBullet.isAlive )
    gBullet.Y -= gBullet.Y_Vel * DeltaTime;  
    gBullet.Rect.y = (int)gBullet.Y;

#5294490 c++: sprintf but return chars. Possible?

Posted by fastcall22 on 01 June 2016 - 10:42 AM

Use StringBuilder:

class string_builder {
	template<typename T>
	string_builder& operator << (const T& val) {
		s << val;
		return *this;

	operator const std::string () const {
		return s.str();

	std::ostringstream s;

int main(int argc, char* argv[]) {
	try {
		// contrived example
		if ( argc <= 1 ) {
			throw std::runtime_error(
				string_builder() << "Not enough arguments, got " << argc
	catch ( const std::exception& ex ) {
		std::cerr << "Exception caught: " << ex.what() << std::endl;
Wait, this isn’t Java?

#5292953 My Texture to HBITMAP function leaks and I don't know why...

Posted by fastcall22 on 22 May 2016 - 05:33 PM

// assuming std::vector<uint8_t> CDirectXWrapper::image_buffer;

image_buffer.resize(textureDesc.Width * textureDesc.Height * 4); // may or may not trigger realloc
uint8_t* destination = image_buffer.data();

#5292949 My Texture to HBITMAP function leaks and I don't know why...

Posted by fastcall22 on 22 May 2016 - 05:16 PM

For starters, you assign new[]’d memory to destination, but you don’t delete[] it. You may also consider using std::vector instead, so you only need to make an allocation for every time the source image grows, instead of allocating every frame.

#5291979 Trying to draw area from image fails.

Posted by fastcall22 on 16 May 2016 - 07:06 PM

Integer division: 1 / 3 is 0.

Consider using float literals wherever you expect to have a non-integer result:

float topborder    = (1.f / n)	  * (t - 1);
float bottomborder = 1 - ((1.f / n) * (n - t));

#5291898 Plane equation, + or - D

Posted by fastcall22 on 16 May 2016 - 11:44 AM

I tend to use +D, since it’s consistent with transformations and the like:

   0 = Ax + By + Cz + D
→  0 = Px*Nx + Py*Ny + Pz*Nz + D
→  0 = (Px,Py,Pz,1) dot (Nx,Ny,Nz,D)
→  0 = (float4(pt.xyz,1)) dot (float4(normal,distance))

#5291455 my C++ console 3D fps Game on Windows from scratch

Posted by fastcall22 on 13 May 2016 - 03:03 PM

Pretty cool! I’ve done something similar:

The color space was generated by combining a combination of foreground colors, background colors, and the three fill chars:

U+0032 ' ' 0%
U+2591 '░' 25%
U+2592 '▒' 50%
U+2593 '▓' 75%

After throwing out duplicates, there were about 360 unique colors. I then used voro++ to do fast nearest-neighbor lookup in 3d space.
Then the process was rendering to an 80x60 image, then transforming (r,g,b) to (foreground,background,char) and sending it to the GPU to render.

But now with Windows 10, the terminals are all different P:

#5289431 Optimization issue when using operator=

Posted by fastcall22 on 30 April 2016 - 10:28 AM

A good compiler should optimize away your entire test. Therefore, it is dangerous to make assumptions based on what you have here.

Redacted-- Frob is right, I forgot which board I was posting in.
Also, upon a second look, I realized that operator* is probably a typo of operator*=

My post is useless.

#5289040 "Could not find or load main class . . ."

Posted by fastcall22 on 27 April 2016 - 11:38 PM

Eh? I thought the proper way to launch jars was:

java -jar /path/to/jar

#5288483 Noob pointer question

Posted by fastcall22 on 24 April 2016 - 01:03 PM

Yes. It fails because there was not an allocation made for the address of a in the heap.

There are two general memory allocation strategies for objects depending on the lifetime of the objects: Stack and heap.

Stack memory is super quick as it only increments a stack pointer register, but binds the lifetime of the object to the scope it was created in; FILO ordering.

Heap memory is slower in that a registry of allocations must be traversed to find space for the object. Contrast to stack memory, objects can be deallocated at any time-- it is not bound to the scope it was created in. A contrived example would be a particle explosion effect, where the particles fizz out at random times.

There are other allocation strategies as well, such as pool allocations.

Whenever you use a reference or pointer, you must be mindful lifetime of the object it refers to. For instance, while your first example is valid, you must be careful not to use a after deleting pA, as the integer it once referred to no longer exists.

// simple demo of scopes and object lifetimes

struct Foobar { int x; };

int main() {
    Foobar f1;
    Foobar* pf1;
    Foobar* pf2;
    Foobar* pf3;

    /* 1: */ {
        Foobar f2;
        Foobar f3;

        /* 2: */ {
            Foobar f4;

            pf1 = &f4;
            pf2 = new Foobar;
            pf3 = pf1;
        } // f4 destroyed, pf1 and pf3 are invalid!

        // pf3->x = 5;  // Undefined behavior-- you’d be lucky to crash here
    } // f3, f2 destroyed

    delete pf2;  // foobar located at pf2 destroyed
} // f1 destroyed

#5288358 How do I link my DLLs to Code Blocks?

Posted by fastcall22 on 23 April 2016 - 06:00 PM

I tried copying the dll file directly into the folder my project is in, but the system just comes up with another missing dll to complain about...

You can use Dependency Walker to find all the DLLs you need, though I suspect you would only need to copy all the allegro DLLs.

There are mainly two places where the DLLs can be copied, the system32 directory, or the directory the program is in...

Actually, putting the DLLs into the system directory is the "correct thing"...

I disagree. According to Dynamic-Link Library Search Order for Desktop Applications, it also searches %PATH%, which I argue would be much cleaner than whoring out the system directory to third party libraries. Just add the allegro binary directory to %PATH% and you should be good to go.

I prefer copying (or hard-linking) the DLLs directly into the project directory, that way I can zip-and-deploy at any time. And also avoids the problem (for some libraries):
libwowamazing.dll: x86 or x64? debug or release? Linked against the mutli-threaded runtime or the static runtime?

#5287853 Negative ping? Or how do I sync time with client and server?

Posted by fastcall22 on 20 April 2016 - 03:51 PM

I suspect phone's time is not really correct.

Bingo. Clocks aren’t perfect, analog or digital. Think of a mechanical watch, always slipping either a few minutes ahead or behind over time. Digital clocks suffer the same problem, but on a much smaller scale (see: how can a digital clock drift in accuracy?). These days, your system periodically syncs the time with a nearby time server. This helps, but you still don’t have the exact time, unless you can you guarantee that all time servers have the exact same time.

What do you guys suggest?

Just ask the server what time it is, and adjust accordingly:

1. Client requests server time.
2. Client adjusts the value returned by the server, according to the time it took for that request to return.
3. Use this value as a baseline for all timestamps returned by the server, or repeat and average error.