Few questions - game loop, data types, speed

Hello, I have a few questions after studying some topics in this forum regarding game creation:
1) What's the fastest way to wait in the game loop? I've seen two approaches:
thread.sleep(10)andsynchronized(this) { wait(10); }2) What data types shall I use? In C++ I use to prefer int over short in all cases, because 32bit hardware works faster with integers. Is this same on cell phones?
3) Speed of applications is slow. I just wonder wheter it's my fault. I was testing application, which only cleared the buffer and outputted FPS and I got around 20 frames. It was Nokia 6300 with 240x320 display. After testing on other phones I've found out that the bigger the resolution, the slower the game is going. Is this normal?
Thanks for replies...

1) You're not going to notice any really speed difference between the two code snippets. Read up on 'Threads', and you'll see why one may be used in place of the other depending on the situation. In general there may be a slight performance loss, however unnoticable, when using the synchronized version, but when you are multithreading it is likely necessary.
sleep(int) is impossible to interrupt, so it's generally a no-no in most situations. However we are talking about devices where every bit of performance helps, so as long as it works for ya, it's not a big deal.
2) The performance difference is fairly negligable, if any. The biggest thing to consider is memory requirements, and shorts take 1/2 the data.
Also, many phones don't support floating point data types, so you'll likely need to use ints/longs to calculate your values if you want to have any accuracy beyond whole numbers. Doing something like shifting bits or using 1000x values in your calculations can get around most of the problems when you can't use floats.
3) The biggest performance killers are IO, memory allocation, screen drawing; pretty much in that order. So I imagine that you are re-creating a new String object every time you output your FPS value on screen right? Doing that every frame would destroy any hopes of getting high-performance.
Just be careful, and never allocate objects when you can avoid it. anything where you concat String objects using + will cause your performance to die a horrible painful slow death. Remove anything that says 'new' from your main loop, and all String operations, and it'll likely speed things up a lot for ya.
Does your main loop have something like this?
g.drawString("FPS: " + currentFps, 0,0,Graphics.TOP | Graphics.LEFT);
This is very bad because of the String operation. It'll create a new String every frame.
If you have any more specicif questions, or you'd just like to pick the brain of a mobile game dev, stop by my messageboard:
http://attackgames.proboards84.com
Message was edited by:
hooble

Similar Messages

  • Stupid question on checking data types

    Hi
    I want to write a function that can accept a parameter which could be an int or an int array. This is what I have so far:
    void translateParams(Object obj) {
    Class type = obj.getClass();
    if (type.isArray()){
    //do something
    Two questions - firstly am I going about this the right way (i.e. have the parameter be type "object" and then check to see what it is) or is there a better alternative. Secondly how can I do the javascript equivalent of isNumeric()??

    If you need the same method name to accept two parameter types, just overload the method:public void someMethod(int parm){
       // some code
    public void someMethod(int[] parm){
       // some code
    }If you have common functionality between the two methods, one can call the other:public void someMethod(int parm){
       // some code
    public void someMethod(int[] parm){
       for (int i =0;i<parm.length;i++){
          someMethod(parm);

  • I have a question about the data type static

    for any of you that read my last post for my assignment this is still the same thing but i have broke it down more, but i am getting an error and i am not for sure i understand why that is. I think i am confused on why i should, or could use a static?
    thanks again guys
    package wordstester;
    import javax.swing.JOptionPane;
    * @author christopher izatt
    public class WordsTester {
         * @param args the command line arguments
        public static void main(String[] args) {
                  // prompt the user to enter a string of their choice
          String wordChosen;
          wordChosen = JOptionPane.showInputDialog
              ("Please enter a word of your choice here");
          String middlePart;
          middlePart = Words.getMiddle(wordChosen);      <----- error nonstatic method can not be referenced in a static context
          System.out.println("At the middle of " + wordChosen + " is: "
                     + middlePart);
    package wordstester;
    * @author christopher izatt
        public class Words {
        private String wordChosen;
        public String Words(String letters) {
            wordChosen = letters;
            return wordChosen;
        public String getMiddle(String wordChosen) {
            int letters = wordChosen.length() / 2;
            int endindex = letters +1;
            return wordChosen.substring(letters, endindex);
       

    Try this.
    Imagine a blueprint from which houses are constructed. The blueprint indicates that each house will have a garage, a roof, a front door, etc. However, each house will have its own roof - be it a tar shingle roof or a cedar roof or maybe thatch - but that's another issue.
    Now, in the lower left corner of the blueprint, we find the architect's name and company logo. That logo is part of the blueprint - each house will NOT have its own discreet copy of that item. Instead, each house will share the one and only copy of that logo.
    That's what static members are. They are called "class variables" or "class methods" and are accessed through the class name instead of an object name.
    I hope that helps.

  • HEELLLLP with abstract data types(ie. interfaces)

    Hello Java World,
    I have a few questions regarding abstract data types(ADT) such as interfaces, etc.
    1. Which of the following is allowed in Java ?
    interface TA extends student, Employee
    class teachAssist implements TA, Cloneable, Sortable{..}
    2. ADTs cannot be instantiated only extended/implemented(coded)??
    3. Can a interface implements/extend classe(s)?
    4. Why is a Vector not an ADT? Is it because it contains implementations for its some of its methods?
    Thanks for the help, in advance!!
    RahimS

    Hello Java World,
    I have a few questions regarding abstract data
    types(ADT) such as interfaces, etc.
    1. Which of the following is allowed in Java ?
    interface TA extends student, Employee
    {...}Allowed (if student and Employee are also Interfaces).
    class teachAssist implements TA, Cloneable,
    Sortable{..}Allowed.
    >
    2. ADTs cannot be instantiated only
    extended/implemented(coded)??True.
    3. Can a interface implements/extend classe(s)?No. An interface simply defines a skeleton...says what methods are present in classes that implement it...therefore an interface cannot 'implement' anything. It may however extend other Interfaces.
    4. Why is a Vector not an ADT? Is it because it
    contains implementations for its some of its methods?A Vector is not an ADT because it is fully implemented (it contains implementations for ALL of its methods).
    >
    >
    Thanks for the help, in advance!!
    RahimS

  • As to the data type of the data type of the difference between two date type of datas

    Hi,
    I have a question about the data type of the difference between two date type of datas.
    There are two date type of datas as:
    SSHIPMENTS.RECEIVEDATETIME
    SSHIPMENTS.PROMISEDATETIME
    I try to use the following SQL Script in Oracle SQL*Plus as:
    SELECT CASE
    WHEN (SSHIPMENTS.RECEIVEDATETIME - SSHIPMENTS.PROMISEDATETIME) < '000 01:00:00.000' THEN 'OnTime'
    WHEN (SSHIPMENTS.RECEIVEDATETIME - SSHIPMENTS.PROMISEDATETIME) < '000 01:30:00.000' THEN '60-89 Minutes'
    ELSE '3+ Hours'
    END
    FROM SSHIPMENTS;
    The error message of "Invalid Number" for the '000 01:30:00.000' happens.
    I don't know if the data type of the interval is wrong.
    Many Thanks,
    Cathy

    SELECT CASE
    WHEN (to_char(SSHIPMENTS.RECEIVEDATETIME,'hhmiss') - to_char(SSHIPMENTS.PROMISEDATETIME,'hh24miss')) < '010000' THEN 'OnTime'
    WHEN (to_char(SSHIPMENTS.RECEIVEDATETIME,'hhmiss') - to_char(SSHIPMENTS.PROMISEDATETIME,'hh24miss'))< '000 01:30:00.000' THEN '60-89 Minutes'
    ELSE '3+ Hours'
    END
    FROM SSHIPMENTS;
    just try it out..

  • About Number Data type

    Hi All,
    I have few issues with "Number" data type
    1) trying to convert string "0.0000007" to Number i am getting value with exponential (1e-7). This is only when we have more than 5 0's after decimal.
    2) If i try to do below calculation, i am not getting exact value:
    ex: 999999.999999+999999999999=1000000999999-999999999999 = 1000000(expected should be:999999.999999)
    0.3*6=1.79999998 (exact value: 1.8)
    Please let me know what might be the issue......
    Thanks in advance to all....

    That's standard behavior for floating point.  If you search the forum for
    past discussions of floating point and Number you'll see explanations why.
    To get displayable strings, use toPrecision or toFixed

  • Which data type for X_Data_Type argument to PlotXY(...)

    Using Labwindows/CVI 2013.
    I'm collecting data and time stamps.
    The time is acquired by calling time( &timeTag );
    timeTag is declared as time_t;
    So now I have a big array of time_t.
    I want to use PlotXY to display the data.  The x-axis of the graph control is configured for absolute time so it will display time and date.
    My question is:
    What data type should I use for the X_Data_Type argument to the PlotXY(...) function?
    Should I convert the absolute time to double and use VAL_DOUBLE?
    Or should I use the time_t values as is and use VAL_UNSIGNED_INTEGER?  Will this still work if I build as a 64-bit application.
    Thanks,
    Kirk
    Solved!
    Go to Solution.

    You can use both: the information is basically the same but using time_t datatype you will loose the fractional part of seconds, which may or may not be a problem for you (apparently is not since you are already getting data using time () and are satisfied with that).
    Look at <cvisampledir>\userint\TimeDateUnits example for an application of time graph using doubles: you can modify the example simply using time () instead of GetCurrentDateTime () and setting the appropriate data type in PlotXY ().
    Proud to use LW/CVI from 3.1 on.
    My contributions to the Developer Zone Community
    If I have helped you, why not giving me a kudos?

  • Questions on Merging Dis-similar Data Types...

    I am using Web-I version 11.5.8.834 (We do not use the Crystal Reports module, all of our reports are built with Web-I).
    I have two questions:
    Question 1: First I am attempting to create a report from two different universes and need to merge a dimension from each universe.  The two dimensions have similar data, but one is set up as a "string", and the other universe has the same data set up as a "number".  Our IT department creates and maintains the universes and I have requested that one of the dimension data type be changed to match the other, but I am told that other users have already set up reports using these dimensions and to change them at this point might cause a problem with their reports.  So my first question is: Can two separate dimensions be setup within a single universe, using the same data field, each having different data types (e.g., a field with numeric data be set up as a "string" and a second dimension be setup as a "number")?  If this works, I can make a recommendation to our IT department to do this and I will not have to resort to Question 2.  but just in case, here is Question 2:
    Question 2: I have two other dimensions that I might be able to use, but it requires creating a variable and "trimming" data off of each of the fields.  The first universe is a part number with three alpha characters followed by four numeric characters (PRT1234).  The second universe has a serial number, in which the first four characters match the last four characters of the other universe (1234-00111).  If I trim off the first three characters from the first universe using a variable (=right([Part_Number];4), and trim off the last six characters from the second universe using a variable (=left([Serial_Number],4), the variables will have matching data.  The second question is: Can variables be merged?  I've tried, but it isn't working so far.  If so, can someone give me some hints on how to do it?
    Edited by: Charles Norman on Aug 8, 2008 11:42 AM
    Edited by: Charles Norman on Aug 8, 2008 11:43 AM

    Charles,
    Can variables be merged?
    No, local variables cannot be merged.  The manipulation must be performed at the database level via Designer before the data comes across to the report.  As an aside, your IT deparatment can create "new" objects just for you, placed in the list under a separate sub-class that manipulates the data to your liking and will not upset other users who already built reports using the original columns of data.  I guess my point is that you can have multiple objects placed in your universe that derive from the same column in a given table -- user A has it per their flavor and user B has it per his flavor.
    Thanks,
    John

  • In the attached VI why does one loop coerce the data type while the other doesn't?

    In the attached VI why does one loop coerce  the data type while the other doesn't?
    Solved!
    Go to Solution.
    Attachments:
    AAA.vi ‏8 KB

    I'm guessing you created the Enum on the front panel.  If you right-click it and create an indicator, it will match the type, and be an enum.  LabVIEW represents enums as U16, but because the types aren't identical (for example, your enum has 3 values, but a U16 has 65,536 values), LabVIEW automatically coerces (or converts) the smaller (enum) representation into the larger (U16) value.

  • Convert values in loop to correct data types

    I need to convert the values in a loop to the correct data types. It compiles, but I get an error. It says,
    Exception in thread "main" java.lang.NumberFormat Excepton: A
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at ExtFile.main(ExtFile.java:22)
    Here is the code:
    import java.text.* ;
    import java.io.* ;
    class ExtFile
    public static void main (String args[]) throws IOException
    // Open the external file whose file name was provided as a
    // command line program invocation argument.
    ExternalFile dataFile = new ExternalFile(args[0]);
    String dataLine = dataFile.getLine();
    char candidate;
    int curPrecinct;
    String precinctIn;
    while (!dataFile.havehitEOF())
    precinctIn = dataFile.getLine();
    candidate = dataLine.charAt(0);
    curPrecinct = Integer.parseInt(dataFile.getLine());
    // Get data line to process
    dataLine = dataFile.getLine();
    System.out.println(dataLine);
    } // EndWhile
    // Close the data file
    dataFile.close();
    } // EndMain
    } // Endclass ExtFile
    What does this exception mean and how might I fix it??

    Hello,
    The line of code:
    curPrecinct = Integer.parseInt(dataFile.getLine());accepts a String (stored in a file) and produces an int (an integer representation of the String). However, if you pass it a String which doesn't represent a integer an exception is thrown. For example, if you want to obtain an integer from the String "123a", an exception will arise because you can not parse "123a" into an int because 123a is not an int, that is, it has a letter 'a' in it - and ints do not.
    To correct this you must pass (make the line in the file) represent an int.
    I hope this works.

  • Function returning string.  Data type question

    Hello all,
    Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    Our database has a parent record master_member_record_id & and children of those records member_record_id. I wrote a function which returns the master record for the child.
    eg. get_master(member_record_id). simple enough.
    I have wrote the opposite of this also, get_member_records(master_member_record_id). Obviously this function has multiple records to return so I have it set to return a listagg string with ',' separation. They want to be able to use this function as follows:
    select * from member_table where member_record_id in (get_member_records(master_member_record_id));
    or something similar, I realize this is a data type issue here, wondering if this is even possible. What do you think?
    Thanks in advance for your criticism/help,
    Chris

    My disagreement is with how pipeline table functionality is used.
    Instead of this (what it sounds like the OP is doing but returning CSV format)
    create or replace type TClientIdArray is table of number;
    create or replace function GetClientIDs( parentID number ) return TClientIdArray is
      array TClientIdArray;
    begin
      select
        client_id bulk collect into array
      from master_table
      where parent_id = parentID;
      return( array );
    end;A pipeline would look as follows:
    create or replace type TClientIdArray is table of number;
    create or replace function GetClientIDs( parentID number ) return TClientIdArray pipelined is
    begin
      for c in (select
                   client_id
                 from master_table
                 where parent_id = parentID ) loop
        pipe row( c.client_id );
      end loop;
      return;
    end;The first method is in fact more sensible in this case, especially when used from PL/SQL. A single SQL call/context switch to get a list of client identifiers. The issues with the first method are
    - cannot effectively deal with a large data set of client identifiers
    - would be suboptimal to use this function in subsequent SQL
    - if called by a client, a ref cursor (not collection) should be returned
    But assuming that the list of client identifiers are needed to be stepped through via complex PL/SQL app processing, using a (small) array is fine (assuming that concurrency/locking is not needed via a FOR UPDATE on the select that identifies the client identifiers to process).
    A pipeline in this case does not do anything better. It introduces more moving parts - as a native PL/SQL can no longer be used to get the collection and step through it. A TABLE() SQL function is needed, a SQL statement, and more context switching.
    The pipeline is simply an unnecessary layer between the code wanting to use the client identifiers and the SQL statement supplying the client identifiers. This approach of SQL -calls-> PIPELINE -calls-> MORE SQL is invariable wrong - unless the pipeline (PL/SQL code) does something very funky with the data from its SQL call, prior to piping it, that cannot be done using SQL.
    If the "user" of that client identifiers is SQL code, then both the above methods are flawed. As this code is already SQL, why use PL/SQL to call more SQL code? Simply use the SQL code/logic that supplies the client identifier list directly in the SQL code that needs the client identifiers. This means something like SQL JOIN, EXISTS, or IN clauses.

  • Question about uesr-defined data types

    Can anyone help me to answer the question?
    Explain the user-defined data types in Oracle Spatial, and give examples how these data types and their associated operations are used to support
    i.     Storage
    ii.     Indexing
    iii.     Retrieval
    of spatial data.
    thanks!!

    you need to look at the oracle spatial user's guide, which gives most of that information. it is downloadable from otn...

  • What is the impact of using a variant data type on performance, speed memory demands etc?

    This is another one of my "lets get this settled once and for all" threads.
    I have avoided variant data types whenever possible to keep the performance of my apps up. From some observatsions i have made over the years, I am of the opinion that;
    1) In-place operations can not be carried out on variants.
    2) Passing a variant to a sub-VI (regardless of the terminal on the icon connector) are always copied.
    I would like confirmation or correction of the above so we know more about this animal we call LabVIEW.
    Thank you,
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction
    Solved!
    Go to Solution.

    A couple notes:
    1. You can use the To/From Variant nodes for the Inplace Element Structure to operate inplace on the contained variant data. This should work just fine even if you have a big 2D array contained.
    2. Variants are incredibly useful when you use them for Variant Attributes, rather than just storing data. The Variant Attribute implementation uses a binary tree to store the key value pairs, which provides quick insertion and lookup.
    3. I don't work on the internals of LV, but I see no reason whatsoever that passing a variant into a subVI would always necessitate a copy. I could be wrong, but that sounds very odd to me.
    However, I have generally started trending towards using flattened strings. Flattened strings are generally more efficient memory-wise, because they don't contain all the type descriptor information, just the raw data. (I think there's some exception when flattening LV Classes.) Variants always store the type descriptor, so even an empty variant can take up a bit of memory.
    Variants received a big performance boost from 7.x to 8.x. They used to have a bad reputation, but I wouldn't be afraid to use them where applicable. I personally don't see a lot of benefits over flattened strings, though, except in the case of tools like the OpenG Variant INI files, which can dynamically parse out and construct variant types.
    Jarrod S.
    National Instruments

  • Silly data types question involving strings

    what sort of data type do I need to do this operation
    I want this data to be inserted into table Term: 2002 T2
    OracleCommand cmd = new OracleCommand("INSERT INTO FILEONE(Term) VALUES ('2003 T2');", dbConn);
    it says I am using an invalid character which I am assuming is to do with data type or the way I am putting together my INSERT statement ...
    thanks,
    Lance

    What is FILEONE?
    insert into <TABLE> (<COLUMN>) values ...
    So you are inserting into the "term" column of table "fileone".
    Insert syntax can be found here:
    http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/toc.htm
    =======================================
    Mark A. Williams
    Oracle DBA
    Author, Professional .NET Oracle Programming
    http://www.apress.com/book/bookDisplay.html?bID=378

  • Data Type questions

    I’m passing data values from a 3rd party system into CRMOD. Can you let me know if the below two statements are correct please?
    1) WebLink data type: The value I’m passing into this field can just be of type String right?
    2) Picklist Values: Are all values in a picklist of type String? If I have a pick list of number like (1, 2, 3, 4), these number values are still of type String right?
    Thanks

    I’m passing data values from a 3rd party system into CRMOD. Can you let me know if the below two statements are correct please?
    1) WebLink data type: The value I’m passing into this field can just be of type String right?
    2) Picklist Values: Are all values in a picklist of type String? If I have a pick list of number like (1, 2, 3, 4), these number values are still of type String right?
    Thanks

Maybe you are looking for