Archief - java prob

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

b0rt

Legacy Member
kheb een probleem met java
kben een mario-kloon aan het make en ik ben nu bezig aan een jump-engine
probleem is da als ik

while(jump<=10){
y++; // de hoogte dus
jump++;
Thread.sleep(100);
repaint();
}

gebruik, de engine eerst y+10 doet, 1000ms wacht en dan tekent ipv y+1->teken->wacht->y+2->teken->wacht->...


hoe los ik da op?

Silenger.BE

Legacy Member
Ik weet niks van Java maar die Thread van wat is die? Main thread, jump thread?

while (jump <= 10)
{
y++; // de hoogte dus
jump++;
repaint();

sleep(100); 100ms :s //je moet de thread waar deze code instaat, sleep gebruike
}

b0rt

Legacy Member
Originally posted by Silenger.BE
Ik weet niks van Java maar die Thread van wat is die? Main thread, jump thread?

while (jump <= 10)
{
y++; // de hoogte dus
jump++;
repaint();

sleep(100); 100ms :s //je moet de thread waar deze code instaat, sleep gebruike
}
die thread is een algemene code, ma da is denk ik het probleem ni, tis volges mij de repaint();

Silenger.BE

Legacy Member
Die jump code waar staat die? In een Thread, Main loop,...

Probeer eens een log te gebruiken, misschien zie je dan beter wat er fout gaat, denk dat er iets mis is met je threads, is java thread save?

while (jump <= 10)
{
log("jumping\n");
y++;
jump++;
log("y: %d\n", y);
log("jump: %d\n", jump);
repaint();

log("jump delay start: %s\n", timenow);
sleep(100);
log("jump delay over: %s\n", timenow);
}

En zet anders in diene repaint functie zoiets
if (state = jumping) log("paint called");

b0rt

Legacy Member
Originally posted by Silenger.BE
Die jump code waar staat die? In een Thread, Main loop,...

Probeer eens een log te gebruiken, misschien zie je dan beter wat er fout gaat, denk dat er iets mis is met je threads, is java thread save?

while (jump <= 10)
{
log("jumping\n");
y++;
jump++;
log("y: %d\n", y);
log("jump: %d\n", jump);
repaint();

log("jump delay start: %s\n", timenow);
sleep(100);
log("jump delay over: %s\n", timenow);
}

En zet anders in diene repaint functie zoiets
if (state = jumping) log("paint called");
da lijkt me meer op c++ dan java :p

da probleem is btw veel voorkomend na het schijnt, ge moest daarvoor ne dubblebuffer voor gebruike ofzo, ma da begrijp ik ni :sad:

fretn

Legacy Member
voor games werk je best met één grote loop (hoe meer keer 'm loopt hoe hoger uw fps )

en voor springen enzo, werk je dus best niet in subloopkes, maar verspreid je die spring code over meerdere frames

en doe je éénmaal in die "grote" loop een render van uw scene (repain() in uw geval)

b0rt

Legacy Member
dus moet ik die getImage enzo in ne loop zette? srry voor de n00b-vragen :sad:

fretn

Legacy Member
gewoon één grote loop, waar je alle acties in uw game in behandeld

vb (pseudo code) :

while(ingame) {
checkJumps();
checkDeath();
checkPoints();
...(enz)
renderGraphics();
}

function checkJumps() {
var gravity = 0.5;
if(jumpKeyIsDown) {
if (!wasJumpingLastFrame) {
jumpYvelociyt = 3;
}
player.y += jumpYvelocity;
jumpYvelocity *= gravity;
wasJumpingLastFrame = true;
}
... (enz)
}

function renderGraphics() {
playerImage.x = player.x;
playerImage.y = player.y;
...(enz)
repaint();
}

Silenger.BE

Legacy Member
Wat fretn zei, je moet voor een 2D game geen threads gebruiken. Je zal meer probs hebben dan iets anders dan... ah en best eerst alles naar een buffer drawen en dan diene buffer naar scherm drawen anders zal het scherm flitsen. Mja hoop dat ik niets slecht zeg, want ik weet niet wat java's library zijn draw functies doen, kan zijn dat drawen al gebufferd is.

b0rt

Legacy Member
Originally posted by Grayfox
lol, een 'jump-engine' :D
ni moeilijk doen, ik kom ni op ne betere naam :p



en fretn: ik kan paint(Graphics g) alleen benaderen via repaint();, en met repaint(); wacht die eerst op alle handelingen die der uitgevoerd worden, dus da komt altijd op het laatste :sad:

fretn

Legacy Member
Originally posted by Unlimited4s
fretn: ik kan paint(Graphics g) alleen benaderen via repaint();, en met repaint(); wacht die eerst op alle handelingen die der uitgevoerd worden, dus da komt altijd op het laatste :sad:

een "render" gebeurt altijd nadat alle acties (positioneren) uitgevoerd zijn, dus dit is toch geen probleem ? (ofwel snap ik uw vraag niet)

b0rt

Legacy Member
Originally posted by fretn
een "render" gebeurt altijd nadat alle acties (positioneren) uitgevoerd zijn, dus dit is toch geen probleem ? (ofwel snap ik uw vraag niet)
in while{} kan ik geen public zetten, en der ook ni na linken

EDIT: en hij tekent pas as while gedaan is, dus bij ne loop zal ie eeuwig het tekenen uitstellen

Silenger.BE

Legacy Member
:confused: Kan je echt niet in een loop je paint functie aanroepe?

Ik zou zeggen zoek eens op internet naar een voorbeeld en kijk eens hoe ze het daar doen.

wlibaers

Legacy Member
Originally posted by fretn
voor games werk je best met één grote loop (hoe meer keer 'm loopt hoe hoger uw fps )

en voor springen enzo, werk je dus best niet in subloopkes, maar verspreid je die spring code over meerdere frames

en doe je éénmaal in die "grote" loop een render van uw scene (repain() in uw geval)

Inderdaad. Want er is nog aan nadeel aan dergelijke subloops: terwijl ze uitgevoerd worden staat de rest van de level stil. en het kan toch niet de bedoeling zijn dat vijanden even bevriezen zolang je spring-animatie duurt?

b0rt

Legacy Member
ik heb het probleem EINDELIJK gevonde, en twas nog simpel ook..
kmoest gewoon return; op het einde zette en alles werkt vanaf de eerste keer :unsure:

gerto

Legacy Member
ik ken geen java ofzo , maar mag'k nu is iets vragen :)
lijkt dit niet een beetje extreem enorm hard op C++? :)

b0rt

Legacy Member
gerto zei:
ik ken geen java ofzo , maar mag'k nu is iets vragen :)
lijkt dit niet een beetje extreem enorm hard op C++? :)
ja een beetje, ma java vin ik wa simpeler (en ge kunt jammer genoeg geen c++based games op ne gsm doen)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan