Search Results

Search found 10661 results on 427 pages for 'move semantics'.

Page 160/427 | < Previous Page | 156 157 158 159 160 161 162 163 164 165 166 167  | Next Page >

  • Space invaders clone not moving properly

    - by ThePlan
    I'm trying to make a basic space invaders clone in allegro 5, I've got my game set up, basic events and such, here is the code: #include <allegro5/allegro.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_primitives.h> #include <allegro5/allegro_font.h> #include <allegro5/allegro_ttf.h> #include "Entity.h" // GLOBALS ========================================== const int width = 500; const int height = 500; const int imgsize = 3; bool key[5] = {false, false, false, false, false}; bool running = true; bool draw = true; // FUNCTIONS ======================================== void initSpaceship(Spaceship &ship); void moveSpaceshipRight(Spaceship &ship); void moveSpaceshipLeft(Spaceship &ship); void initInvader(Invader &invader); void moveInvaderRight(Invader &invader); void moveInvaderLeft(Invader &invader); void initBullet(Bullet &bullet); void fireBullet(); void doCollision(); void updateInvaders(); void drawText(); enum key_t { UP, DOWN, LEFT, RIGHT, SPACE }; enum source_t { INVADER, DEFENDER }; int main(void) { if(!al_init()) { return -1; } Spaceship ship; Invader invader; Bullet bullet; al_init_image_addon(); al_install_keyboard(); al_init_font_addon(); al_init_ttf_addon(); ALLEGRO_DISPLAY *display = al_create_display(width, height); ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue(); ALLEGRO_TIMER *timer = al_create_timer(1.0 / 60); ALLEGRO_BITMAP *images[imgsize]; ALLEGRO_FONT *font1 = al_load_font("arial.ttf", 20, 0); al_register_event_source(event_queue, al_get_keyboard_event_source()); al_register_event_source(event_queue, al_get_display_event_source(display)); al_register_event_source(event_queue, al_get_timer_event_source(timer)); images[0] = al_load_bitmap("defender.bmp"); images[1] = al_load_bitmap("invader.bmp"); images[2] = al_load_bitmap("explosion.bmp"); al_convert_mask_to_alpha(images[0], al_map_rgb(0, 0, 0)); al_convert_mask_to_alpha(images[1], al_map_rgb(0, 0, 0)); al_convert_mask_to_alpha(images[2], al_map_rgb(0, 0, 0)); initSpaceship(ship); initBullet(bullet); initInvader(invader); al_start_timer(timer); while(running) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_TIMER) { draw = true; if(key[RIGHT] == true) moveSpaceshipRight(ship); if(key[LEFT] == true) moveSpaceshipLeft(ship); } else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) running = false; else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_ESCAPE: running = false; break; case ALLEGRO_KEY_LEFT: key[LEFT] = true; break; case ALLEGRO_KEY_RIGHT: key[RIGHT] = true; break; case ALLEGRO_KEY_SPACE: key[SPACE] = true; break; } } else if(ev.type == ALLEGRO_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_LEFT: key[LEFT] = false; break; case ALLEGRO_KEY_RIGHT: key[RIGHT] = false; break; case ALLEGRO_KEY_SPACE: key[SPACE] = false; break; } } if(draw && al_is_event_queue_empty(event_queue)) { draw = false; al_draw_bitmap(images[0], ship.pos_x, ship.pos_y, 0); al_flip_display(); al_clear_to_color(al_map_rgb(0, 0, 0)); } } al_destroy_font(font1); al_destroy_event_queue(event_queue); al_destroy_timer(timer); for(int i = 0; i < imgsize; i++) al_destroy_bitmap(images[i]); al_destroy_display(display); } // FUNCTION LOGIC ====================================== void initSpaceship(Spaceship &ship) { ship.lives = 3; ship.speed = 2; ship.pos_x = width / 2; ship.pos_y = height - 20; } void initInvader(Invader &invader) { invader.health = 100; invader.count = 40; invader.speed = 0.5; invader.pos_x = 300; invader.pos_y = 300; } void initBullet(Bullet &bullet) { bullet.speed = 10; } void moveSpaceshipRight(Spaceship &ship) { ship.pos_x += ship.speed; if(ship.pos_x >= width) ship.pos_x = width-30; } void moveSpaceshipLeft(Spaceship &ship) { ship.pos_x -= ship.speed; if(ship.pos_x <= 0) ship.pos_x = 0+30; } However it's not behaving the way I want it to behave, in fact the behavior for the ship movement is un-normal. Basically I specified that the ship only moves when the right/left key is down, however the ship is moving constantly to the direction of the key pressed, it never stops although it should only move while my key is down. Even more weird behavior, when I press the opposite key the ship completely stops no matter what else I press. What's wrong with the code? Why does the ship move constantly even after I specified it only moves when a key is down?

    Read the article

  • What are the dos and dont's when leaving a job? [closed]

    - by john ryan
    I'm going to resign from my current employer (manufacturing sector), where I've been working for 2.6 years as an IT Application Developer. It's the first company I've worked in after I graduated from college. I don't have any problem with the company, I just realized that I want to learn new technologies and get out of my comfort zone and move to the IT industry. I already got a job offer from another company. My IT manager has told me that I am one of the best players in our group, that our group is enough to support our company and that it would be unacceptable if anyone of us resigned. They will counter the offer, but I'm set on leaving. My problem is that I don't know what are the essential dos and don'ts when resigning from a current employer. For example I'm expecting a lot of inquiries on why I'm leaving from people in the company, what do I need to say?

    Read the article

  • Questions Anyone?

    - by Kevin Smith
    I've been working with WebCenter Content for almost 9 years now and have a ton of topics rolling around my head that I'm sure would make excellent blog post once I find the time to write them up. Does anyone have any questions they would like answered? Like why does WCC do ...? How does this feature work? I can't seem to get this working? Post your question to the comments and if it is something on my list of topics I had planned on creating a blog post about I will move it to the top of the list.

    Read the article

  • Window decoration of emacs23 window on fluxbox is outside screen

    - by mit
    I am starting emacs remotely over an ssh connection. But on the emacs window I cannot find a way to resize or move it. There is no fluxbox title bar visible, and I guess the title bar is above the visible viewport, because emacs starts vertically with more height than the screen has. The lower border of the emacs window is also below the viewport border, so I cannot resize the window. I am starting emacs like this: emacs23 This is the emacs version: This is GNU Emacs 23.1.1 (x86_64-pc-linux-gnu, GTK+ Version 2.20.0) of 2010-03-29 on yellow, modified by Debian The remote system that runs emacs is 10.04 Lucid Lynx amd64. The local system is running 9.10 Karmic Koala 32 bit and Fluxbox 1.1.1-2

    Read the article

  • Xubuntu keeps loading on install with usb stick

    - by mattyh88
    I'm trying to install Xubuntu on my computer. I've followed a guide to create a USB bootable drive. I've inserted the USB stick and started the computer. I can see Xubuntu loading and after a minute or 2 it shows me a screen asking me if I'd like to use the live version or if I'd like to install. I choose install. Then on the next screen I select English as language. When I click continue, Xubuntu just keeps loading. It doesn't really freeze as I can still quit and move the cursor. When I clicked quit, I see the live version and all is working just fine. I can browse the internet, etc. What could be wrong?

    Read the article

  • Why do we use the Pythagorean theorem in game physics?

    - by Starkers
    I've recently learned that we use Pythagorean theorem a lot in our physics calculations and I'm afraid I don't really get the point. Here's an example from a book to make sure an object doesn't travel faster than a MAXIMUM_VELOCITY constant in the horizontal plane: MAXIMUM_VELOCITY = <any number>; SQUARED_MAXIMUM_VELOCITY = MAXIMUM_VELOCITY * MAXIMUM_VELOCITY; function animate(){ var squared_horizontal_velocity = (x_velocity * x_velocity) + (z_velocity * z_velocity); if( squared_horizontal_velocity <= SQUARED_MAXIMUM_VELOCITY ){ scalar = squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY; x_velocity = x_velocity / scalar; z_velocity = x_velocity / scalar; } } Let's try this with some numbers: An object is attempting to move 5 units in x and 5 units in z. It should only be able to move 5 units horizontally in total! MAXIMUM_VELOCITY = 5; SQUARED_MAXIMUM_VELOCITY = 5 * 5; SQUARED_MAXIMUM_VELOCITY = 25; function animate(){ var x_velocity = 5; var z_velocity = 5; var squared_horizontal_velocity = (x_velocity * x_velocity) + (z_velocity * z_velocity); var squared_horizontal_velocity = 5 * 5 + 5 * 5; var squared_horizontal_velocity = 25 + 25; var squared_horizontal_velocity = 50; // if( squared_horizontal_velocity <= SQUARED_MAXIMUM_VELOCITY ){ if( 50 <= 25 ){ scalar = squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY; scalar = 50 / 25; scalar = 2.0; x_velocity = x_velocity / scalar; x_velocity = 5 / 2.0; x_velocity = 2.5; z_velocity = z_velocity / scalar; z_velocity = 5 / 2.0; z_velocity = 2.5; // new_horizontal_velocity = x_velocity + z_velocity // new_horizontal_velocity = 2.5 + 2.5 // new_horizontal_velocity = 5 } } Now this works well, but we can do the same thing without Pythagoras: MAXIMUM_VELOCITY = 5; function animate(){ var x_velocity = 5; var z_velocity = 5; var horizontal_velocity = x_velocity + z_velocity; var horizontal_velocity = 5 + 5; var horizontal_velocity = 10; // if( horizontal_velocity >= MAXIMUM_VELOCITY ){ if( 10 >= 5 ){ scalar = horizontal_velocity / MAXIMUM_VELOCITY; scalar = 10 / 5; scalar = 2.0; x_velocity = x_velocity / scalar; x_velocity = 5 / 2.0; x_velocity = 2.5; z_velocity = z_velocity / scalar; z_velocity = 5 / 2.0; z_velocity = 2.5; // new_horizontal_velocity = x_velocity + z_velocity // new_horizontal_velocity = 2.5 + 2.5 // new_horizontal_velocity = 5 } } Benefits of doing it without Pythagoras: Less lines Within those lines, it's easier to read what's going on ...and it takes less time to compute, as there are less multiplications Seems to me like computers and humans get a better deal without Pythagorean theorem! However, I'm sure I'm wrong as I've seen Pythagoras' theorem in a number of reputable places, so I'd like someone to explain me the benefit of using Pythagorean theorem to a maths newbie. Does this have anything to do with unit vectors? To me a unit vector is when we normalize a vector and turn it into a fraction. We do this by dividing the vector by a larger constant. I'm not sure what constant it is. The total size of the graph? Anyway, because it's a fraction, I take it, a unit vector is basically a graph that can fit inside a 3D grid with the x-axis running from -1 to 1, z-axis running from -1 to 1, and the y-axis running from -1 to 1. That's literally everything I know about unit vectors... not much :P And I fail to see their usefulness. Also, we're not really creating a unit vector in the above examples. Should I be determining the scalar like this: // a mathematical work-around of my own invention. There may be a cleverer way to do this! I've also made up my own terms such as 'divisive_scalar' so don't bother googling var divisive_scalar = (squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY); var divisive_scalar = ( 50 / 25 ); var divisive_scalar = 2; var multiplicative_scalar = (divisive_scalar / (2*divisive_scalar)); var multiplicative_scalar = (2 / (2*2)); var multiplicative_scalar = (2 / 4); var multiplicative_scalar = 0.5; x_velocity = x_velocity * multiplicative_scalar x_velocity = 5 * 0.5 x_velocity = 2.5 Again, I can't see why this is better, but it's more "unit-vector-y" because the multiplicative_scalar is a unit_vector? As you can see, I use words such as "unit-vector-y" so I'm really not a maths whiz! Also aware that unit vectors might have nothing to do with Pythagorean theorem so ignore all of this if I'm barking up the wrong tree. I'm a very visual person (3D modeller and concept artist by trade!) and I find diagrams and graphs really, really helpful so as many as humanely possible please!

    Read the article

  • Should I choose 10.04 LTS or 10.10?

    - by torbengb
    I'm new to Ubuntu (and Linux) but I want to give it a go. I've spent a few evenings trying to get 10.10 to run but I think my nVidia 8400 GS is causing trouble; only recovery mode with failsafeX gets me to the desktop (low-res but seems to be fully functional otherwise). Given that the xx.04 vesions are long-term support, I'm wondering whether it would be smarter for me to use that. I don't need to be on the cutting edge - I prefer to have a system that just works, long-term. Later I hope to move my media center and wife's netbook over too. Question: Why should I (not?) choose the 10.04 LTS version over the newest 10.10 version?

    Read the article

  • Changing in pavucontrols tab "Recording" via command line

    - by Mojo
    I'm using pavucontrol to make changes in the "Recording". I'm changing the source (??) of a Loopback to Null-Output from "Internes Audio Analog Stereo" to "Monitor of Internes Audio Analog Stereo" see the screenshot http://picpaste.de/Bildschirmfoto_vom_2013-10-26_11_32_03-z0KwnFDE.png I'm now looking for a possibility to do this via command line. So far I've done the following: pactl load-module module-null-sink ? creates a new sink pactl load-module module-loopback ? creates a new sink input pactl load-module module-loopback ? creates another sink input pacmd move-sink-input 0 1 ? changes the sink of the sink-input (to Null-Output); this is like changing manually in the pacucontrol tab "Playback". It's just the last part (making the change like shown in the screenshot) via command line that I'm not able to do. I'd be very happy for any advice or suggestions. Thanks already!

    Read the article

  • Moving OVD from Test to Production

    - by mark.wilcox
    Customer asked support "How to move a test OVD server to production". There is a couple of ways to do this. One way is to clone the environment: http://download.oracle.com/docs/cd/E15523_01/core.1111/e10105/testprod.htm#CH... Another way - which is particularly useful if you want to push configuration from a parent OVD server to children in a cluster: http://download.oracle.com/docs/cd/E14571_01/oid.1111/e10046/basic_server_set... Note if you use the second option and you have any data in a Local Store Adapter - you may also need to use the oidcmprec tool to synchronize that data: http://download.oracle.com/docs/cd/E14571_01/oid.1111/e10029/replic_mng_mon.h... Posted via email from Virtual Identity Dialogue

    Read the article

  • Recovery from hell - undeleting partition overwritten by Xubuntu 12.10 installer?

    - by DaimyoKirby
    This is turning into a nightmare - following my initial recovery of my two partitions, I went to install Xubuntu 12.10 (again). At this time I had two partitions - one of ~39 GB had Zorin OS 6 installed on it, and another of ~33 GB had nothing installed, just a few files in it that I had manually backed up (moved) there. When I got to the partitioning step, I chose "Replace Zorin OS 6 with Xubuntu 12.10", along with LVM, naturally thinking that the installer wouldn't touch the second partition, since Zorin wasn't installed on it. I was dead wrong. Upon booting my newly installed Xubuntu 12.10, I found in gparted that there were only two partitions - ~255MB, which appears to have the boot stuff in it (it's flagged boot in gparted), and another of ~74 GB. Question: Is there any way to salvage my old files on the non-Zorin ext3 partition? I'm really upset I made such a dumb move (again...), and any and all help is appreciated very, very much!

    Read the article

  • ATI graphics card, with gnome shell, screen flickers

    - by bioShark
    After installing gnome shell, without any problem, after log in the fonts are missing and it looks like crap...nothing is readable. Don't want to make it a double post, because my issue is similar to the one from this question but for me the problems have not been solved properly. After running the commands from that post, and installing the latest AMD 11.10 driver, the Gnome shell display issues have been solved. But each time I move the mouse in the upper left corner, to bring up the applications...my entire screen flickers. Without the applications been displayed, everything looks fine. Hardware: ATI HD4870, Intel Q6600.

    Read the article

  • Options for Application Registry

    - by Matt Felzani
    I work for a small software company (about 200 people building 8-10 applications) and I was hoping to get some advice on products that might be out there to manage the information of which clients are using which versions of our products? The most fundamental relationship would be that a "product" has "versions" and a given "version" is used by a "client." Uses would be: Determine which clients use which products Determine which clients are on which versions of a product Determine which clients are exposed to which vulnerabilities because of the version they use Determine which clients cannot move to a new version because of a vulnerability in the new version that they may hit Determine which clients should be approached for an upgrade Any thoughts or product reviews would be greatly appreciated! Thanks in advance.

    Read the article

  • Client side prediction/simulation Question

    - by Legendre
    I found a related question but it doesn't have what I needed. Client A sends input to move at T0. Server receives input at T1. All clients receive the change at T2. Question: With client-side prediction, client A would start moving at T0, client-side. All other clients receive the change at T2, so to them, client A only started moving at T2. If I understand correctly, client B will always see client A's past position and not his current position? How do I sync both client B and client A?

    Read the article

  • Is the increase in earning potential for a software developer enough to justify the cost of pursuing a masters degree? [closed]

    - by John Connelly
    Possible Duplicate: Is a Master's worth it? I am considering possibly enrolling in distance education at Kaplan University in order to pursue my masters. On one hand, I would prefer to have more free time so that I can continue to study for certifications and play with the technologies that interest me, work on my little side projects, etc. On the other hand, I am wondering how much difference it can make for my career if I go ahead and get a masters. I have been a .NET programmer since about 2004/2005. I'm currently working in a stable position but possibly considering a move to phoenix when my company's contract runs its course. There is not enough time between now and then for me to be complete with my masters, but I'm just trying to consider whether I should start. The main thing I am trying to determine is really whether or not the increase in earning potential is going to make the cost of pursuing my masters degree a good investment. Any thoughts?

    Read the article

  • Disable/remove Cinnamon keyboard shortcurts

    - by Robin
    I installed Cinnamon on Ubuntu 12.04 using sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-stable sudo apt-get update sudo apt-get install cinnamon Now I am looking for a way to disable the keyboard shortcuts ALTF7 (move window) and ALTF8 (resize windows). I already disabled those key bindings under Keyboard - Shortcuts. This has no effect. I did not find them in gconf-editor under apps -> muffin . Does anybody know how to remove/edit/disable those key bindings ?

    Read the article

  • Strategies for removing register_globals from a file

    - by Jonathan Rich
    I have a file (or rather, a list of about 100 files) in my website's repository that is still requiring the use of register_globals and other nastiness (like custom error reporting, etc) because the code is so bad, throws notices, and is 100% procedural with few subroutines. We want to move to PHP 5.4 (and eventually 5.5) this year, but can't until we can port these files over, clean them up, etc. The average file length is about 1000 lines. I've already cleaned up a few of the low-hanging fruit, however the job took almost an entire day for 2 300-500 line files. I am in a quagmire here (giggity). Anyway, has anyone else dealt with this in the past? Are there any strategies besides tracing backwards through the code? Most static analysis tools don't look at code outside of functions - are there any that will look at the procedural code and help find at least some of the problems?

    Read the article

  • How do I enable or disable the global application menu?

    - by Michael Ekstrand
    I'm fairly excited for Unity, as it looks like a promising new direction for Ubuntu. However, I do have a concern - will it be possible to use Unity without the global menu? I have my window manager set to focus-follows-mouse/sloppy focus, and find the productivity gains to be immense. Sloppy focus is incompatible, however, with global menus, as it is possible for the focus to change while you move from window to menu. Will Unity support an option to use window menus while still using Unity?

    Read the article

  • I want to record a screencast of a processing sketch

    - by nathanvda
    I have a created a music visualisation using Processing. I now want to convert that to a video, and the least obtrusive way I could think of is to record a screencast. I figured exporting Processing to video including audio, from within Processing itself, on ubuntu seemed an unsolved issue. Very hard and also could cause timing sync issues (since the music keeps running while images are captured). So move on to the screencast method. Dead-easy, I figured. But I was wrong. First hurdle was to find a way to record the sound from the audio (and not the mic). I did find a tutorial for that here. In short: use gtk-recordmydesktop and pulse audio. But, apparently, what happens: Processing does not use ALSA. When the sound is playing, it does not appear in the Pulse Audio mixer. How can I record the audio now?

    Read the article

  • Pros and Cons of Session Replication

    - by techsjs2012
    Do I really need Session Replication? I am working on a number of web projects for a firm. Most of the projects are about one or two pages of input and then doing a save to a mysql database. Very Basic projects. My SA's are pushing to try to get session replication working in JBoss but I don't really see any need for it and all of its overhead. We need load balancing and clustering so if the server does go down we can move the new requests to the backup service but I am not to big in session replication. This is very low volume projects. In my eyes what is the odds of a user being in the project as the server goes down on the one or two pages. I need to convince the SAs that session replication is an un-necessary complication in this instance. I am looking for pros and cons of session replication so that I can better structure my argument.

    Read the article

  • Marching squares: Finding multiple contours within one source field?

    - by TravisG
    Principally, this is a follow-up-question to a problem from a few weeks ago, even though this is about the algorithm in general without application to my actual problem. The algorithm basically searches through all lines in the picture, starting from the top left of it, until it finds a pixel that is a border. In pseudo-C++: int start = 0; for(int i=0; i<amount_of_pixels; ++i) { if(pixels[i] == border) { start = i; break; } } When it finds one, it starts the marching squares algorithm and finds the contour to whatever object the pixel belongs to. Let's say I have something like this: Where everything except the color white is a border. And have found the contour points of the first blob: For the general algorithm it's over. It found a contour and has done its job. How can I move on to the other two blobs to find their contours as well?

    Read the article

  • Add in the header of the license type is enough to say: "my code is licensed"? (Open-source)

    - by silverfox
    I do not know if this is the correct place to ask this stackexchange. Note: If a moderator can move to the correct place (if I am in the inappropriate site SE) I read on various sites about licenses. I did just put the license type in the header file (in my case the javascript file - open-source). /* * "codeName" "version" * http://officialsite.com/ * * Copyright 2012 "codeName" * Released under the "LICENSE NAME" license * http://officialsite.com/LICENSE NAME */ javascript code ... In the same folder I leave a copy of the license. The listing of the folder looks like this: * codeName.js * LICENSE In the file LICENSE would leave my code uses. What nobody says is if it is enough to say my code is licensed (the case of an open-source). Or is something more required? Sorry for the bad English. Thanks.

    Read the article

  • How do I get one monitor on top of the other?

    - by Jan
    I'm using a laptop and a monitor (wall mounted) over my laptop. I would like to reflect this physical hardware setup in my software screen setup. So that I can move my mouse upward, out of my laptop screen and use the monitor on the wall. I have been searching for a solution for a while, and I hope somone can help me out. I'm using Ubuntu 10.10 "out of the box". Side by side screen setups works just fine, over/under is doesn't work.

    Read the article

  • Is it safe to set FPS rate to a constant?

    - by Ozan
    I learned from game class that in update function, every movements must be time dependent for the sake of linearity in movement. We made a simple game. Every move like going left, right or jump is written time dependent. But, in some other computers, our game is worked very differently. For example, our character jumps higher than it should be. I guess this is because each computer has different FPS rate according to its specification. My question is that what should we do to make this game work in same way in every computer? Setting FPS rate to a constant is a solution?

    Read the article

  • Letting go of a project

    - by SkyOrg
    I've been the sole developer of a niche product for my company for nearly 6 years. I've grown quite attached to the project and I enjoy working on it. However, it was the decision of management to take the project out of my hands and move it under the wings of another team. Unfortunately, I'm having a hard time letting go of the project. I'm sad to see it leave my hands since I've put so much time into it and enjoyed working on it, but it also allows me to work on new things. I've even caught myself being a bit hostile to the other team, which is poor on my part. How can I convince myself to just let it go?

    Read the article

  • Efficient way to render tile-based map in Java

    - by Lucius
    Some time ago I posted here because I was having some memory issues with a game I'm working on. That has been pretty much solved thanks to some suggestions here, so I decided to come back with another problem I'm having. Basically, I feel that too much of the CPU is being used when rendering the map. I have a Core i5-2500 processor and when running the game, the CPU usage is about 35% - and I can't accept that that's just how it has to be. This is how I'm going about rendering the map: I have the X and Y coordinates of the player, so I'm not drawing the whole map, just the visible portion of it; The number of visible tiles on screen varies according to the resolution chosen by the player (the CPU usage is 35% here when playing at a resolution of 1440x900); If the tile is "empty", I just skip drawing it (this didn't visibly lower the CPU usage, but reduced the drawing time in about 20ms); The map is composed of 5 layers - for more details; The tiles are 32x32 pixels; And just to be on the safe side, I'll post the code for drawing the game here, although it's as messy and unreadable as it can be T_T (I'll try to make it a little readable) private void drawGame(Graphics2D g2d){ //Width and Height of the visible portion of the map (not of the screen) int visionWidht = visibleCols * TILE_SIZE; int visionHeight = visibleRows * TILE_SIZE; //Since the map can be smaller than the screen, I center it just to be sure int xAdjust = (getWidth() - visionWidht) / 2; int yAdjust = (getHeight() - visionHeight) / 2; //This "deducedX" thing is to move the map a few pixels horizontally, since the player moves by pixels and not full tiles int playerDrawX = listOfCharacters.get(0).getX(); int deducedX = 0; if (listOfCharacters.get(0).currentCol() - visibleCols / 2 >= 0) { playerDrawX = visibleCols / 2 * TILE_SIZE; map_draw_col = listOfCharacters.get(0).currentCol() - visibleCols / 2; deducedX = listOfCharacters.get(0).getXCol(); } //"deducedY" is the same deal as "deducedX", but vertically int playerDrawY = listOfCharacters.get(0).getY(); int deducedY = 0; if (listOfCharacters.get(0).currentRow() - visibleRows / 2 >= 0) { playerDrawY = visibleRows / 2 * TILE_SIZE; map_draw_row = listOfCharacters.get(0).currentRow() - visibleRows / 2; deducedY = listOfCharacters.get(0).getYRow(); } int max_cols = visibleCols + map_draw_col; if (max_cols >= map.getCols()) { max_cols = map.getCols() - 1; deducedX = 0; map_draw_col = max_cols - visibleCols + 1; playerDrawX = listOfCharacters.get(0).getX() - map_draw_col * TILE_SIZE; } int max_rows = visibleRows + map_draw_row; if (max_rows >= map.getRows()) { max_rows = map.getRows() - 1; deducedY = 0; map_draw_row = max_rows - visibleRows + 1; playerDrawY = listOfCharacters.get(0).getY() - map_draw_row * TILE_SIZE; } //map_draw_row and map_draw_col representes the coordinate of the upper left tile on the screen //iterate through all the tiles on screen and draw them - this is what consumes most of the CPU for (int col = map_draw_col; col <= max_cols; col++) { for (int row = map_draw_row; row <= max_rows; row++) { Tile[] tiles = map.getTiles(col, row); for(int layer = 0; layer < tiles.length; layer++){ Tile currentTile = tiles[layer]; boolean shouldDraw = true; //I only draw the tile if it exists and is not empty (id=-1) if(currentTile != null && currentTile.getId() >= 0){ //The layers above 1 can be draw behing or infront of the player according to where it's standing if(layer > 1 && currentTile.getId() >= 0){ if(playerBehind(col, row, layer, listOfCharacters.get(0))){ behinds.get(0).add(new int[]{col, row}); //the tiles that are infront of the player wont be draw right now shouldDraw = false; } } if(shouldDraw){ g2d.drawImage( tiles[layer].getImage(), (col-map_draw_col)*TILE_SIZE - deducedX + xAdjust, (row-map_draw_row)*TILE_SIZE - deducedY + yAdjust, null); } } } } } } There's some more code in this method but nothing relevant to this question. Basically, the biggest problem is that I iterate over around 5000 tiles (in this specific resolution) 60 times each second. I thought about rendering the visible portion of the map once and storing it into a BufferedImage and when the player moved move the whole image the same amount but to the opposite side and then drawn the tiles that appeared on the screen, but if I do it like that, I wont be able to have animated tiles (at least I think). That being said, any suggestions?

    Read the article

< Previous Page | 156 157 158 159 160 161 162 163 164 165 166 167  | Next Page >