Skip to main content

Some Java, J2ME Class, functions

Complex String usage.

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#field_summary

String
public String(char[] value,
      int offset,
      int count)
Allocates a new String that contains characters from a subarray of the character array argument. The offset argument is the index of the first character of the subarray and the count argument specifies the length of the subarray. The contents of the subarray are copied; subsequent modification of the character array does not affect the newly created string.
Parameters:
value - Array that is the source of characters
offset - The initial offset
count - The length
Throws:
IndexOutOfBoundsException - If the offset and count arguments index characters outside the bounds of the value array


"java is always pass-by-value" 
https://softwareengineering.stackexchange.com/questions/286008/parameters-are-passed-by-value-but-editing-them-will-edit-the-actual-object-li/286013
The statement that "java is always pass-by-value" is technically correct, but it can be very misleading, because as you have just witnessed, when you pass an object to a function, the function can modify the contents of the object, so it appears that the object has been passed by reference, and not by value. So, what is happening?

Pointers. That's what's happening...

So be careful with parameter pass by reference. In general I do not understand all of previous post, but I can use real project and Debugging technique to figure out how object property change after call method that pass the object as parameter. Compare before and after method call with pass by value vs by reference.
For example when I use refactoring technique Move Class and Move Method, in a function I need pass a property of a object like this:

public class MainGameScreen
{
    public ArchAngel AA;
    public ReadMedia readMedia;
    public GameSettings gameSetting;
    ...
    public void turn_helper2(GameConfig paramg, int paramInt1, int paramInt2)
   {
    ...
    case 14:
      paramg.m = this.n;
      this.av = 90;
      i1 = 0;
      paramg.a = (60 * turn_helper(i1 + this.av));
      paramg.b = (60 * turn_helper2(i1 + this.av));
      paramg.e = i1;
      paramg.h = (paramg.i = 0);
      paramg.j = this.av;
      paramg.l = 2;
      this.v += 1;
      paramg.d = 0;
      this.AA.bool_n = true;      <-- this is culprit
      break;
    case 13:
    ...
  }

// Usage
turn_helper2(gameConfigArr[i1], paramInt1, paramInt2);

}
After move to new Class:
public class MainGameHelper {
   public void turn_helper2(GameConfig paramg, int paramInt1, int paramInt2, bool_n, ...)
   // Instead of pass AA object, I only pass bool_n property value, so when its value change, it do not reflect and take effect to original object AA.
  // May be this example is not exactly as pass by reference careless but it look similar and be careful while refactoring

   {

    ...
    case 14:

   bool_n = true;  // Original this.AA.bool_n = true;      <-- this is culprit

    case 13:
    ...

  }

When MainGameScreen use:
public class MainGameScreen
{
    public ArchAngel AA;
    public ReadMedia readMedia;
    public GameSettings gameSetting;
    public MainGameHelper gameHelper = new MainGameHelper();
    ...

  // Usage after method moved
  this.gameHelper.turn_helper2(gameConfigArr[i1], paramInt1, paramInt2, this.AA.bool_n ...);
  // Bug here because of  we should pass whole object this.AA.

  It is clear but in real refactoring and real project, it may be very messy and very long method, class that lead to tedious debug time.

}

JME Graphics.drawImage to SpriteBatch.draw()
https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/SpriteBatch.html


Run J2ME apps on Android. 
If it work then I do not have to port some game to Android using GDX. But GDX can port to iOS (easy ?).
http://davy.preuveneers.be/phoneme/?q=node/10
http://davy.preuveneers.be/phoneme/?q=node/28
After try some app, I can not make my game work. May be it need some modify before it can run. Event with PhoneME version that noted can fix error "non displacment position...".
Some game have custom package use, ie. com.samsung.util.AudioClip. Can these apk app handle this ?

setClip and clipRect
https://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/javax/microedition/lcdui/Graphics.html#clipRect(int,%20int,%20int,%20int)
https://stackoverflow.com/questions/22576569/libgdx-how-to-clip

Some migrate note J2ME to LibGDX
https://github.com/libgdx/libgdx/wiki/Texture-packer

Graphics.drawImage              => SpriteBatch.draw
keyHandle (getGameAction ...) => Custom and implement a similar handler
Image                                     => Texture
Graphics                                 => SpriteBatch (and ...)
Graphics.clipRect, setClip     => Scissor ?
RecordStore (DB)                  => Preference
Binary pack (~image sprite)  => Texture array normal image or use Texture-packer, binary pack...
Graphics.fillRect                   => Implement a similar function, may be use draw image (mono color).
Character (procedural)          => Object Hero, Fighter, Enermy ...
game state, screen, school (lever) =>


Front paint() JME to render(), from keyPressed() to touchDown() ...
From JME must have function to GDX game loop, there are some similar mechanism to render screen, handling key event. But when we look at more detail it become somehow quite complex in some case.
Basically I will move paint() from JME to render() or run() (?) and modifying keyPressed() to touchDown() keyDown() on GDX.





Class Hierarchy

  • class java.lang.Object
    • class javax.microedition.lcdui.AlertType
    • class javax.microedition.lcdui.Command
    • class javax.microedition.lcdui.Display
    • class javax.microedition.lcdui.Displayable
      • class javax.microedition.lcdui.Canvas
      • class javax.microedition.lcdui.Screen
        • class javax.microedition.lcdui.Alert
        • class javax.microedition.lcdui.Form
        • class javax.microedition.lcdui.List (implements javax.microedition.lcdui.Choice)
        • class javax.microedition.lcdui.TextBox
    • class javax.microedition.lcdui.Font
    • class javax.microedition.lcdui.Graphics
    • class javax.microedition.lcdui.Image
    • class javax.microedition.lcdui.Item
    • class javax.microedition.lcdui.Ticker

Interface Hierarchy


Comments

Popular posts from this blog

Rand mm 10

https://stackoverflow.com/questions/2447791/define-vs-const Oh const vs define, many time I got unexpected interview question. As this one, I do not know much or try to study this. My work flow, and I believe of many programmer is that search topic only when we have task or job to tackle. We ignore many 'basic', 'fundamental' documents, RTFM is boring. So I think it is a trade off between the two way of study language. And I think there are a bridge or balanced way to extract both advantage of two method. There are some huge issue with programmer like me that prevent we master some technique that take only little time if doing properly. For example, some Red Hat certificate program, lesson, course that I have learned during Collage gave our exceptional useful when it cover almost all topic while working with Linux. I remember it called something like RHEL (RedHat Enterprise Linux) Certificate... I think there are many tons of documents, guide n books about Linux bu

Martin Fowler - Software Architecture - Making Architecture matter

  https://martinfowler.com/architecture/ One can appreciate the point of this presentation when one's sense of code smell is trained, functional and utilized. Those controlling the budget as well as developer leads should understand the design stamina hypothesis, so that the appropriate focus and priority is given to internal quality - otherwise pay a high price soon. Andrew Farrell 8 months ago I love that he was able to give an important lesson on the “How?” of software architecture at the very end: delegate decisions to those with the time to focus on them. Very nice and straight-forward talk about the value of software architecture For me, architecture is the distribution of complexity in a system. And also, how subsystems communicate with each other. A battle between craftmanship and the economics and economics always win... https://hackernoon.com/applying-clean-architecture-on-web-application-with-modular-pattern-7b11f1b89011 1. Independent of Frameworks 2. Testable 3. Indepe