Ich habe ein einfaches Beispiel erstellt: Hintergrund-Oberflächenschicht und 10 kleine "Punkte" darauf (10 Oberflächenschichten 10x10 px, die jeweils mit fillRect() gefüllt sind). Methode Paint bewegt einfach die Punkte um periodisch:Soll ich SurfaceLayer auf jedem Frame neu zeichnen?
private SurfaceLayer background;
private List<Layer> dots = new ArrayList<Layer>();
@Override
public void init()
{
background = graphics().createSurfaceLayer(graphics().width(), graphics().height());
background.surface().setFillColor(Color.rgb(100, 100, 100));
background.surface().fillRect(0, 0, graphics().width(), graphics().height());
graphics().rootLayer().add(background);
for (int i = 0; i < 10; i++)
{
SurfaceLayer dot = graphics().createSurfaceLayer(10, 10);
dot.surface().clear();
dot.surface().setFillColor(Color.rgb(250, 250, 250));
dot.surface().fillRect(0, 0, 10, 10);
dot.setDepth(1);
dot.setTranslation(random()*graphics().width(), random()*graphics().height());
dots.add(dot);
graphics().rootLayer().add(dot);
}
}
@Override
public void paint(float alpha)
{
for (Layer dot : dots)
{
if (random() > 0.999)
{
dot.setTranslation(random()*graphics().width(), random()*graphics().height());
}
}
}
Irgendwie Java-Version alle Punkte Spiele endeten unentschieden, html und Android-Version zeichnen nur 1.
Handbuch nicht eindeutig sagen, ob ich sollte alle diese Punkte wieder ziehen in jedem Aufruf von paint(). Und soweit ich das verstanden habe, ist SurfaceLayer für Fälle gedacht, in denen Sie Layer nicht für jeden Frame ändern (damit der gleiche Puffer wiederverwendet werden kann?), Aber das funktioniert nicht.
Also können Sie mir helfen, mit der richtigen SurfaceLayer-Nutzung? Wenn ich gerade ein Rechteck auf SurfaceLayer gefüllt habe - würde es auf dieser Ebene für immer ramin oder sollte ich es in jedem Farbanruf füllen? Wenn ja - unterscheidet sich das von ImmeadiateLayer?
Ich habe einen Test wie deinen zu den PlayN-Oberflächentests hinzugefügt und sie funktionieren gut für mich auf Java, HTML und Android. Vielleicht stimmt etwas anderes nicht? – samskivert
Hier ist ein Test-Spiel: http://speedy.sh/Q56mx/test-game.tar.gz ich starten Sie es mit: mvn sauber mvn Test installieren -Ptest-html Dann öffnen localhost: 8080 in FF oder Chrome - es zeigt schwarzen Bildschirm mit einem einzelnen weißen Punkt. Vielleicht können Sie einen Blick auf den Code werfen und schnell einen Fehler finden? Oder teilen Sie Ihren Test, damit ich das Problem selbst herausfinden kann. – user1312030