I started working on this project a couple of weeks ago. I was looking for a good (as in good performance) physics library that I could use in Java projects. The ones I found reportedly didn't work well on slower hardware.
The result is Java bindings (i.e. a JNI) to Chipmunk, the 2D physics engine. Below is a demo of it running a simulation on Android Dev Phone 1.
The bindings are far from complete, but I have decided to release the project anyway. Code can be downloaded or browsed from its project page at Github.
Johan
Monday, February 22, 2010
Saturday, October 24, 2009
Flicker-free rendering with double buffering in Java
If you draw graphics directly using the paint(Graphics) method in an AWT component such as Canvas, Frame or Panel your rendering will suffer greatly from flickering. The general solution to this is double buffering.
There are many ways to implement double buffering. One way is to not do it and instead use Swing components, such as JFrame and JPanel, that already does double buffering. Use paintComponent(Graphics) and override it the same way as you would with paint(Graphics).
There are many ways to implement double buffering. One way is to not do it and instead use Swing components, such as JFrame and JPanel, that already does double buffering. Use paintComponent(Graphics) and override it the same way as you would with paint(Graphics).
class JPanelWithSmileyFace extends JPanel {Example paintComponent.
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.YELLOW);
g.fillOval(10, 10, 180, 180);
g.setColor(Color.BLACK);
g.fillOval(90-30, 50, 20, 30);
g.fillOval(90+30, 50, 20, 30);
g.drawArc(40, 40, 200-2*40, 200-2*40, -10, -160);
}
}
public class SmileyFaceDemo {Example main.
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(new JPanelWithOval());
window.pack();
window.setVisible(true);
}
}
Thursday, August 6, 2009
Middle clicking and scrolling
Some more Firefox tweaks in about:config.
- Enable scroll on middle click: general.autoScroll = true
- Disable load URL on middle click: middlemouse.contentLoadURL = false
- Disable paste on middle click: middlemouse.paste = false
Monday, June 29, 2009
Store dict in AppEngine Datastore
This post is about Python and Google Appengine.
I want to store a dict/dictionary in a model. There is no native DictProperty. However there are workarounds.
I want to store a dict/dictionary in a model. There is no native DictProperty. However there are workarounds.
- Encode it somehow (for example with pickle) and store it as a blob.
- Use an Expando model and store your key-values with setattr(yourmodel, key, value). You can get your dict later with yourmodel.dynamic_properties(). See also delattr. This seems to trigger encoding bugs for non-ascii keys.
- Store keys and values separately with two StringListProperty. Combine them to build a dict with dict(zip(keylist, valuelist)).
Saturday, May 16, 2009
Firefox progress bar in address bar
Fission is a great addon/plugin/extension to Firefox that moves the progress/loading bar to the address bar, similar to what Safari has. The color is adjustable. Requires Firefox 3 or better.
Thursday, April 16, 2009
Disable drag and drop in Firefox
I think the drag and drop of images and text in Firefox (especially Firefox 3) is annoying.
It's possible to disable it by setting nglayout.enable_drag_images to false in about:config.
It's possible to disable it by setting nglayout.enable_drag_images to false in about:config.
Thursday, March 26, 2009
Revert commit in Subversion
How to undo a commit (or uncommit) in Subversion.
The svn revert command can not be used as it only reverts local changes, ie. restores all files to the checked out revision.
Instead, here's how to do it. Use the svn merge command. It usually merges revisions from one repository into another. However, it can be used to do the opposite: unmerging.
svn merge -c X SOURCE merges commit X from SOURCE repository to working copy. If X is negative it will be regarded as an inverse merge and the commit removed instead of added.
So, the following command reverts revision 34 in the working copy.
svn merge -c -34 .
Don't forget to commit.
The svn revert command can not be used as it only reverts local changes, ie. restores all files to the checked out revision.
Instead, here's how to do it. Use the svn merge command. It usually merges revisions from one repository into another. However, it can be used to do the opposite: unmerging.
svn merge -c X SOURCE merges commit X from SOURCE repository to working copy. If X is negative it will be regarded as an inverse merge and the commit removed instead of added.
So, the following command reverts revision 34 in the working copy.
svn merge -c -34 .
Don't forget to commit.
Subscribe to:
Posts (Atom)