Hirdetés
- Lassan állítjuk a fát, és a hardverek is be vannak csomagolva
- Klasszikus kínai festmények ihlették a Colorful legfrissebb memóriáinak külsejét
- Ultrakompakt Key E SSD-vel jelentkezett a Silicon Power
- Mesterséges intelligenciára kihegyezett mini PC jött az ASUS műhelyéből
- ASUS blog: ExpertBook P5 notebook, a munkagép
- Milyen TV-t vegyek?
- CPU léghűtés kibeszélő
- Azonnali processzoros kérdések órája
- Milyen belső merevlemezt vegyek?
- A Microsoft szerint nem alku tárgya a TPM 2.0 szükségessége
- Soundbar, soundplate, hangprojektor
- TCL LCD és LED TV-k
- VR topik (Oculus Rift, stb.)
- Projektor topic
- Nem indul és mi a baja a gépemnek topik
Új hozzászólás Aktív témák
-
bajaki
őstag
Sziasztok!
Szeretném megtanulni a Java programozás alapjait magamtól. Milyen könyvet/videósorozatot tudnátok ajánlani ehhez - amit egy kezdő programozó is megért?
-
Karma
félisten
válasz #89874944 #4497 üzenetére
Én nem tapasztaltam ilyen jelenséget a Java kódnál (amit egyébként tükörfordítottunk C#-ra, de az algoritmus szempontjából lényegtelen). Szerintem nem szabadna így viselkednie, de próbálkozhatsz pl. egy gaussian blurrel előtte. A MATLABosat nem próbáltam, egyetem óta nem nyúltam ilyesmihez
Mondjuk úgy olvastam, hogy feltételezi, hogy a kép már szürkeárnyalatúra lett konvertálva korábban – az én esetemben ez különösen fontos volt, mert a fotó tárgya sárga alapon fekete és piros betűket is tartalmazott, és nekem csak a fekete érdekes. Minden mást kidobtam a szürkeárnyalatúsítás során azzal, hogy csak az egyik színcsatorna értékét tartottam meg, a többit meg ugyanarra az értékre állítottam.
[ Szerkesztve ]
“All nothings are not equal.”
-
#89874944
törölt tag
Kipróbáltam a matlabost, ez elég sok fekete pöttyöt rakott a fehér részekre, de messze ez a legjobb kép amit eddig próbáltam. Az androidos is ilyen, vagy a matlab verziót rontották el?
szerk: kézírással is kipróbáltam, ez baromi jó még ha azok a fekete pöttyök is eltűnnének...
[ Szerkesztve ]
-
#89874944
törölt tag
Sziasztok!
Befotózott, gépelt jegyzet pixeleinek javításához kerestem programot, de semmi értelmeset nem találtam, úgyhogy megírom magamnak. Annyi lenne az egész, hogy ha sötét árnyalatú pixelt talál, azt frissíti feketére, ha világosabbat, azt fehérre (a későbbi nyomtatáshoz...). Színes képek vannak, infranview-val próbáltam fekete-fehérre alakítani, de botrányosan xar minőségben csinálta, volt, hogy a fél oldalt kiöntötte feketével, volt, hogy egész szavakat tüntetett el.
Java-ban milyen osztályt lehet ilyen pixel manipulációra használni? (még nem döntöttem miben írom, de ha nem muszáj nem csinálom assembly-ben )
Előre is köszi a segítséget. -
Spam123
tag
válasz Superhun #4489 üzenetére
Na igen, a logikát kéne átlátni. Van egy nxn-es 2D-s tömböm, amibe random berakok gombákat. Majd Valahogy fel kéne ezt térképeznem egy algoritmussal, ami kitölti a négyzeteket számokkal ahol kell. Utána meg már nem olyan nehéz, csak azt kell beállítani, hogy mit csináljon, a user bombára, számra vagy üres kockára kattint. Bár, ha üres kockára kattint, akkor ugye rekurzívan fel kell fedni a pályának azon részét, ahol nincs szám, se bomba. Na ezekben kéne egy kis segítség, kezdőlökés.
-
Spam123
tag
Helló!
Valaki tudna segíteni aknakereső írásában? Nem nagyon tudok elindulni benne. Grafikus lesz Swinggel, toplista, idő, szerializáció pályát és toplistát is.
Egy mintának is örülnék, akárminek!
-
sztanozs
veterán
Tudom, hogy nem programozás, de esetleg van valakinek hozzá ötlete.
Már (korábban) feltelpített java jre hogy hackelhető be Chrome alá? Java vezérlőpultban csak IE és Mozilla browser látszik az integration alatt. Admin jog sajna nincs, csak HKCU alapú registry hackelés, vagy összeklickelős (chrome extension ablakba valamit behúzós) megoldás jöhet szóba...
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
addikt
válasz WonderCSabo #4485 üzenetére
Nem az alap telepítési mappában van a JDK, de ez most mindegy. Utánanéztem, és a JDT-ben van az alap compiler.
-
addikt
válasz WonderCSabo #4482 üzenetére
Van fent JDK, de nincs beállítva a környezeti változókban. Vígan fut az eclipse és generálja a class fájlokat. Lennie kell valami compilernek az eclipse összetevői között.
-
fatal`
titán
válasz WonderCSabo #4482 üzenetére
A JAVA_HOME változó nem feltétlen kell.
Nekem pl. nincs, simán beraktam a JDK-t meg a JRE-t a PATH-ba és így is minden hibátlanul működik.
Mai napig nem értem, hogy miért nem tudja ezt megtenni a JDK telepítője, miért kézzel kell. Pl. Linuxon ez automatikus.
-
modder
aktív tag
JDK - Java Development Kit - Java programok fordításához szükséges környezet
Szerintem ebben a JRE is benne van
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJRE - Java Runtime Environment - Java programok futtatásához szükséges környezet
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJava EE SDK - JDK és/vagy Glassfish
Itt látod, hogy a négy csomagban mi van benne: lehet JDK-val vagy anélküllel
Ugye glassfish nélkül nem lehet, mert maga a Glassfish adja a Java EE (Java SE fölötti) runtime-ot.
http://www.oracle.com/technetwork/java/javaee/downloads/index.htmlJava Glassfish Server - Glassfish + JRE
Egész biztos vagyok benne, hogy ebben nem lesz JDK, csak JRE
https://glassfish.java.net/download.htmlNeked melyik kell?
Ha Java SE programokat akarsz fejleszteni, akkor elég egy JDK. Ha Java EE platformot akarsz fejleszteni, akkor Java SDK (JDK-val vagy anélkül, ha ki akarod tudni cserélni a JDK-t, mert olyan igényeid vannak) -
Jim-Y
veterán
válasz Superhun #4473 üzenetére
Eclipse Ketler, JAVA EE alkalmazásokhoz szánt verzió, új projektnél a Runtime meghatározásánál meg kell adni egy alkalmazásszervert, ami nálam egy Glassfish, letöltöttem a glassfish 4.0-ás verzióját, kéri is a helyét az Eclipse, meg is találja benne a szervert, de itt írja azt a wizard, hogy csak JRE-t talált, egy 1.6-ost ami alapból fent van a gépen, és én adtam hozzá egy 1.7-et de az is csak JRE, így nem enged továbbmenni, mert írja, hogy JDK kell neki.
printscreen: [link]
[ Szerkesztve ]
-
Jim-Y
veterán
igazad van, akkor pontosítok, vállalati lapos, új programot nem tudok installálni, mert megfog az UAC, exe-t tudok futtatni, csak olyat nem ami installálna valamit, így pontos a rendszergazdával az a gond, hogy egy örökkévalóság amíg történik valami, ahhoz, hogy egy újabb verziójú java-t feltegyenek a gépemre, el kell indítanom egy kérvényt, meg kell indokolnom, hogy miért kell stb... egy szó, mint száz, ha meg lehet oldani, akkor inkább a telepítőt megkerülném.
WonderCsabo: értem fene, akkor nem úszom meg...
WonderCsabo: igen, ezt én is megtaláltam, de reméltem, hogy valami egyszerűbb módja is van, azért köszönöm
[ Szerkesztve ]
-
Jim-Y
veterán
Sziasztok, 7-es JDK-t szeretnék feltenni a gépemre, de nem tudok exe-t futtatni, létezik erre valami megoldás? üdv
Az Eclipse igényli teljes JDK meglétét, és nem elégszik meg a JRE-vel.
[ Szerkesztve ]
-
kemkriszt98
tag
válasz WonderCSabo #4467 üzenetére
Na most már ezt is tudom, eddig nem is hallottam olyat hogy amd64... amúgy működik, kösz
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
WonderCSabo
félisten
válasz kemkriszt98 #4466 üzenetére
Itt arról van szó, hogy x86-64 architektúrájú procid van, amit amd64-nek is hívnak, függetlenül a gyártótól. A hibaüzenet arról szól sztem, hogy 64 bites platform esetén a 64 bites programkönyvtár dll kell neki, nem a 32 bites. Próbáld letölteni a 64 bitest és azt használni.
-
kemkriszt98
tag
Sziasztok, tanulgatom a Java3D api-t és az első progim lefordításánál ezt az üzenetet kaptam a NetBeans-tól:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Windows\j3dcore-ogl.dll: Can't load ia 32-bit .dll on a amd 64-bit platformPersze megnéztem a googlit de nem találtam számomra egyértelmű megoldást..... fölég az zavar, hogy helyenként felmerült a kérdés az eredeti kérdezővel szemben hogy milyen procija van.... de ha az " amd 64-bit platform" a cpu-ra vonatkozik akkor miről beszélünk? Intel procim van...
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Karma
félisten
válasz caindwan #4462 üzenetére
Az biztos, hogy valamilyen objektumba be kell foglalnod a háttérbe küldött metódust – a new Runnable() {} is egy anoním osztály definíciója –, ezt nem kerülheted el. Én az adott platformra jellemző magasabb szintű szerkezeteket javasolnám a nyers szálazás helyett: Androidon AsyncTask, Swingnél SwingWorker, egyébként meg ExecutorService.
“All nothings are not equal.”
-
caindwan
aktív tag
Üdv!
Kellene egy kis segítség. A Gui szálon nem futtathatok egy ciklust. Mindenképp muszáj új osztályba raknom? Ha igen akkor, hogyan tudnám onnan meghívni azt a metódust? Ha nem akkor hogyan lehet megoldani? -
kemkriszt98
tag
válasz WonderCSabo #4458 üzenetére
ok
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
WonderCSabo
félisten
válasz kemkriszt98 #4457 üzenetére
Elméleti maximum korlátja nincs, csak implementációs, illetve elérhető memória függvénye. Mivel a BigInteger belül egy int-ekből álló tömböt használ, aminek max hossza Integer.MAX_VALUE lehet, ezért a BigInteger max értéke (2 ^ 32) ^ Integer.MAX_VALUE. Nem hiszem, hogy túl fogod lépni a saját programjaiddal.
-
kemkriszt98
tag
válasz WonderCSabo #4455 üzenetére
Igen, a BigDecimal tanulmányozása közben találkoztam vele, ez nincs behatárolva?
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Karma
félisten
válasz WonderCSabo #4455 üzenetére
Ami egyébként a BigDecimal alapja is, kiegészítve a tizedespont kezeléssel.
“All nothings are not equal.”
-
WonderCSabo
félisten
válasz kemkriszt98 #4453 üzenetére
BigInteger is van Javában.
-
kemkriszt98
tag
válasz Superhun #4451 üzenetére
Konkrétan semmihez de mikor c++-t tanulgattam írtam egy progit ami kiirta a pascal háromszög első n sorát ahol az n-t a felhasználó adja meg és ott elég hamar szembesültem a problémával hogy az int túl kicsi ahhoz hogy az eggyes sorok elemeit tárolja
[ Szerkesztve ]
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
Karma
félisten
válasz kemkriszt98 #4450 üzenetére
BigDecimalt használ, mint ahogy például pénzügyi számításoknál is, ahol para a lebegőpontos ábrázolás.
[ Szerkesztve ]
“All nothings are not equal.”
-
addikt
válasz kemkriszt98 #4450 üzenetére
Java-ban long típus van. Mihez kell neked akkora egész szám, hogy a longba sem fér bele?
-
kemkriszt98
tag
Sziasztok, mit csinál az ember ha olyan számmal akar dolgozni ami egy long int- be se fér bele?
Szerk.: javában van longint?[ Szerkesztve ]
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
modder
aktív tag
válasz bendikeee11 #4447 üzenetére
http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations
bár ez nem az a tipikus sakkprogram dolog, viszont menő.
-
bendikeee11
tag
Sziasztok.
Kérnék tőletek egy kis segítséget. Szakdolgozatot kell írnom, igazából csak téma választásban vagyok tanácstalan, nincs semmilyen ötletem hogy mégis milyen programot írhatnék. Órákon keresztül böngésztem mindenhol és gondolkoztam ezen a dolgon, de nem jutottam semmire.. Nagyon örülnék ha valakinek esetleg lenne ötlete milyen programot valósíthatnék meg. Bármilyen területen mondhattok ötleteket, annyi a lényeg még, hogy legyen egy adatbázis a program mögött.
Remélem tudtok segíteni.
Yesterday is History, Today is a Gift, Tomorrow is Mystery.
-
caindwan
aktív tag
Miért van az, hogy ha nekem fut egy while ciklus akkor az egész jFrame használhatatlan?
-
Karma
félisten
válasz Oppenheimer #4443 üzenetére
A ciklust nem így gondoltam. Attól szakítsd el az animátort, hogy 20 ms-enként meg kelljen hívni; ezt a konstanst töröld mindenhonnan (kivéve a sleepet, legalábbis amíg nem állsz át Timerre), és helyette az eltelt idő paraméter legyen. Azaz a timeDiffet kell átadnod és azzal számolni az elmozdulásokat.
A duplapufferelés helyes használatának utánaolvasgattam, és még annál is sokkal könnyebb, mint amit elképzeltem. Itt van egy használható példa a BufferStrategy használatára, sőt a végén a példakódban van Timer is, meg billentyűkezelés. Szóval bátran emeld át
A Java Timerek egyébként háttérszálon futnak, úgyhogy amit kitaláltál, könnyen megvalósítható a példa követésével.
A kódoddal kapcsolatban: ha az ellenségek között a különbség csak a kép és az a négy konstans ami a pályát befolyásolja, ne csinálj külön osztályokat miattuk. Egy "OscillatingEnemy" elég, ami konstruktorban kap képet és számokat. Ha más ellenségféle is kéne, akkor is használhatsz strategy mintát a viselkedés leírására subclassok helyett.
[ Szerkesztve ]
“All nothings are not equal.”
-
Oppenheimer
nagyúr
Köszönöm a terjedelmes válaszokat! Sorban reagálok mindre.
4440:
első: különösebb oka nincs, ha hazajöttem átírom foreachremásodik: értem, MVC minta alapján szeretném természetesen megcsinálni a játékot, de ez az első ilyen dolog amit csinálok, és a hajnalig tartó gányolásnak lett ez az eredménye. Szóval a destroyEmeny()-t majd animator.animationCycle()-ben kell majd gondolom meghívni, de még nincsenek se lövedékek, se ütközésdetektálás, úgyhogy az arrébb lesz.
harmadik: erre neten találtam egy példát, ezt is beleírom majd ha hazaértem
public void run() {
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while (ingame) {
repaint();
animationCycle();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 2;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
}
gameOver();
}Így gondoltad, ugye?
4441:
"Folyt.: A kódban ki az a GA? A Move most viewport (ablak) vagy világ (0-100) koordinátákban számol? Mert egyértelműen az utóbbiban kéne, és csak rajzolásnál konvertálni pixelpozíciókra."Itt is valóban nagy gányolást műveltem éjjel, megkavarodtam, hogy most az ellenséges objektumoknak ismerniük kell-e GameArea (GA) méretét. A GameArea a fekete hátterű négyzet. Mikor olvastam fent idézett mondatodat, akkor jöttem rá, hogy hülyeséget csináltam, mert csak a rajzolásnál kell konvertálni pixelpozícióra. Most reggel gyorsan átírtam ilyenre, ez az Enemy0:
// this method has to be called in every 20 milliseconds
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + 0.3);
y = (int) (y + 0.1);
}
// else it will go left
else {
x = (int) (x - 0.3);
y = (int) (y + 0.1);
}
}Érdekes, mert most csak balra hajlandó mozogni, aztán egyszer csak megáll, és egy helyben marad. Míg ezt a hszt írtam jöttem rá, hogy az (int)-é konvertálás miatt van a gond. Át fogom írni a koordinátákat double-re, és az int-é konvertálást csak a kirajzolásnál fogom megcsinálni, szerintem ez segíthet.
Az Enemy2 nagyon szépen cikázik jobbra-balra, pont amiatt, mert egész számot adok neki:
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + 1);
y = (int) (y + 0.15);
}
// else it will go left
else {
x = (int) (x - 1);
y = (int) (y + 0.15);
}
}A hozzászólásban lévő többi tanácsot köszönöm és megfogadom őket.
4442:
Erről egyelőre sejtésem sincs, hogy kéne az általad vázolt duplapufferelést megcsinálni, viszont a GameArea konstruktorában meghívok egy ilyet: setDoubleBuffered(true);Mint már említettem az egész GameArea egy gányolás, sok mindent beleírtam este, hogy kipróbálhassam jól mozognak-e az űrhajók. Elküldtem neked privátban az egész osztály forráskódját. A Timeren majd még agyalok.
https://play.google.com/store/apps/details?id=com.lovemap.lovemapandroid
-
Karma
félisten
Filóztam egy kicsit még ezen a duplapufferelésen, arra jutottam hogy mindenképp megérné megcsinálni. Annyi az egész, hogy a játékciklus végénél tényleg rajzolsz egyet – de nem a képernyőre, hanem egy a panellal megegyező méretű Bitmapre, amit a paint metódusban egyszerűen rámásolsz a panel canvasára. Így a játék UI konkrétan semmit se tud a játék világáról; akár macskás állóképeket is rajzolhatna pont ugyanúgy, mint űrhajós lövöldözést.
És a Timerre (annak schedule metódusával) átállást szintén nagyon javaslom.
“All nothings are not equal.”
-
Karma
félisten
válasz Oppenheimer #4439 üzenetére
Folyt.: A kódban ki az a GA? A Move most viewport (ablak) vagy világ (0-100) koordinátákban számol? Mert egyértelműen az utóbbiban kéne, és csak rajzolásnál konvertálni pixelpozíciókra. PROTIP: a játékmotor és a konkrét ablak két egymástól független dolog.
Egyébként a game loopodat kicsit rendbe kéne szedni, mert a mostani elnevezésekkel nem jön át hogy mi mit csinál. Ennek kellene történnie:
1) Kiszámolod a legutolsó periódus óta eltelt időt.
2) Ezzel az értékkel mozgatod a modell szinten (world koordinátákban) az objektumokat.
3) Kiszámolod és kezeled az ütközéseket - a ConcurrentModificationExceptionök miatt okosan kezelve a pusztulásokat - pl. naívan egy listát gyűjtesz minden meghaló entitásról, és az ütköztetés után külön ciklusban törlöd őket a világból.
4) Eltárolod az időt az első lépéshez, most.
5) Invalidálod a panelt.
6) Vársz. Várakozás helyett lehet, hogy egy jó időzítőosztályt kéne használnod amúgy.Rajzolásnál meg, ami aszinkron meghívódik, az aktuális állapotot rajzold ki. Semmi mást ne csinálj. Egyébként azt is lehetne, hogy egy másik ciklus hívogatja a rajzolást, de nem biztos hogy szükséges. Duplapufferelést is lehetne írni, nem sokból tart.
Ez így egy hótprimitív játékciklus, de egyszerű dolgokhoz elég lehet.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz Oppenheimer #4439 üzenetére
Gyorskérdés, amíg tovább olvasom: miért nem használsz foreach ciklust manuális iterátorozás helyett?
Második: a rajzolási ciklusodból takarítsd kifelé a destroyEmeny hívást! Semmi köze hozzá, rajzolja csak ki a pillanatnyi állapotot, de semmi logika.
Harmadik: ezzel a Move implementációval biztosan pofonba szaladsz. Egyrészt a 20 ms fix idő semmilyen körülmények között nem garantálható, ezért úgy szokták megoldani ezt, hogy a Move paraméterben megkap egy legutolsó frissítés óta eltelt időt (pl. milliszekundumban), és azzal számolja a képleteket.
[ Szerkesztve ]
“All nothings are not equal.”
-
Oppenheimer
nagyúr
Érdekes problémába ütköztem, nem tudom mi lehet a gond. Van az űrhajós játékomban 5 féle ellenség. Mindegyik más-más frekvenciával és amplitúdóval cikázik jobbra-balra. Legalábbis kellene nekik, de tök érthetetlenül mozognak.
x és y int változók tárolják a pillanatnyi helyüket, de oly módon, hogy elvileg csak 0 és 100 közötti értéket vehetnek fel, mert ez alapján relatívan számolom ki a pozíciójukat az ablak méretétől függően.
A GameArea (ami a JPanel leszármazottja) osztály drawEnemies() metódusa iterál végig az ellenséges hajókat tároló listán, és rajzolja ki őket.
public void drawEnemies (Graphics g) {
Iterator<Enemy> it = EnemyList.iterator();
while (it.hasNext()) {
Enemy enemy = (Enemy) it.next();
if (enemy.getHealth() > 0)
g.drawImage (enemy.getImage(), (int) (this.getWidth()*enemy.getX()/100), (int) (this.getHeight()*enemy.getY()/100), (int) (this.getWidth()*0.05), (int) (this.getHeight()*0.05), this);
else
DestroyEnemy (enemy);
}
}Amikor csak 1-1 hajót rajzolgattam ki, akkor ez rendben is működött, mindig ott volt a kép kirajzolva ahova terveztem, úgyhogy ezzel elvileg nincsen gond.
Mind az összes "Enemy"-nek van egy saját Move() metódusa, amit ha 20 milliszekundumonként hívnak meg, akkor ennek elvileg az általam tervezett módon kéne az űrhajó koordinátáit módosítania. Például itt van az Enemy0 Move() methodja:
// this method has to be called in every 20 milliseconds
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + GA.getWidth()*0.003);
y = (int) (y + GA.getHeight()*0.001);
}
// else it will go left
else {
x = (int) (x - GA.getWidth()*0.003);
y = (int) (y + GA.getHeight()*0.001);
}
}Ennek elvileg a páros másodpercekben jobbra, a páratlanokban balra kéne mennie, és egy másodperc alatt oldalirányban az ablak szélességének 15%-át megtennie.
Pl. legyen az ablak 540*540-es felbontású. Ekkor az 1 másodperc alatti horizontális irányú elmozdulás pixelben kifejezve 540*0.003*1000/20 = 81, és 81/540 = 0,15, tehát az ablak szélességének 15%-a.
1000/20-szal való szorzás úgy jött, hogy mint ahogy azt már említettem, 20ms-onként kell meghívódnia. Ami meg is történik itt:
public void run() {
while (true) {
repaint();
animator.animationCycle();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}Az animator ismeri a tárolót amiben az Enemy-k vannak, és végigiterálva rajtuk, meghívja mindnek a Move() metódusát az animationCycle() metóduson belül. Ezt megteszi minden 20ms-os alvás között.
Mégis a következő képpen mozognak az ellenséges hajók:
Az A-val jelölt hajók egy pillanat alatt lejönnek fentről, és kimennek a pályáról, a B-vel jelöltek meg abban a magasságban cikáznak jobbra balra, de jóval nagyobb amplitúdóval és sebességgel, mint amire számítottam a kód alapján. Ezt a képet csak úgy tudtam megcsinálni, hogy 900-ra állítottam a Thread.sleep()-et a run metódusban. Egyébként túl gyorsan cikáznának, főleg az A-val jelöltek, mert azok egyből el is repülnek.
Ha 20ms-os alvással futtatom, akkor a B csoport hajói egy másodpercenként visszajönnek a látható pályára, egyszer jobb-, egyszer baloldalról érkezve, ugyanis akkora az amplitúdójuk, hogy idejük nagyját a pályán kívül töltik.
Van valakinek ötlete, hogy kéne ezt debuggolni?
Bemásolom még az ötféle Enemy Move() metódusát:
Elsőé:
// this method has to be called in every 20 milliseconds
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + GA.getWidth()*0.003);
y = (int) (y + GA.getWidth()*0.001);
}
// else it will go left
else {
x = (int) (x - GA.getWidth()*0.003);
y = (int) (y + GA.getWidth()*0.001);
}
}Másodiké:
// this method has to be called in every 20 milliseconds
public void Move () {
// in uneven seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 1) {
x = (int) (x + GA.getWidth()*0.0045);
y = (int) (y + GA.getWidth()*0.002);
}
// else it will go left
else {
x = (int) (x - GA.getWidth()*0.0045);
y = (int) (y + GA.getWidth()*0.002);
}
}Harmadiké:
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + GA.getWidth()*0.01);
y = (int) (y + GA.getWidth()*0.0015);
}
// else it will go left
else {
x = (int) (x - GA.getWidth()*0.01);
y = (int) (y + GA.getWidth()*0.0015);
}
}Negyediké:
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + GA.getWidth()*0.012);
y = (int) (y + GA.getWidth()*0.002);
}
// else it will go left
else {
x = (int) (x - GA.getWidth()*0.012);
y = (int) (y + GA.getWidth()*0.002);
}
}Ötödiké:
public void Move () {
// in even seconds this enemy will go right
long time = System.currentTimeMillis();
if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
x = (int) (x + GA.getWidth()*0.012);
y = (int) (y + GA.getWidth()*0.002);
}
// else it will go left
else {
x = (int) (x - GA.getWidth()*0.012);
y = (int) (y + GA.getWidth()*0.002);
}
}B csoportba az van első és a harmadik Enemy, A csoportban a többi 3.
[ Szerkesztve ]
https://play.google.com/store/apps/details?id=com.lovemap.lovemapandroid
-
WonderCSabo
félisten
válasz trisztan94 #4437 üzenetére
Én erre el szoktam menteni valahova konstanstba a System.getProperty("line.separator") értékét, és azt használom. De a formatter szebb megoldás valóban.
-
caindwan
aktív tag
Már megtaláltam a \n -t
-
caindwan
aktív tag
Hogy "írják" a sormetszetet?
-
kispx
addikt
válasz caindwan #4418 üzenetére
A 32. oldalon/tól
% operátor. Ha a maradéka nulla akkor osztható maradéktalanul.
-
caindwan
aktív tag
Van olyan dolog, hogy if(csak akkor ha elosztható egy bizonyos számmal, azaz maradéktalanul) ?
-
Lacces
őstag
Lenne egy érdekes kérdésem... Elkezdtem nézegetni a Liferay CE-t. Magamnak így használni, tanulgatni. (Megnézni a kódját is, hogyan épül fel).
De eközben megkerestek, hogy tudnék-e egy Liferay oldalt összehozni (idő lenne rá). Elég egyszerű CMS-nek tűnik (WordPress-el is megoldható a dolog) de ragaszkodnak a Liferayhez.
Annyira nem tűnik vészesnek, vagy lehet csapda benne? (beléptetés, naptár funkció, és tényleg egy csomó CMS, adatbázissal összekötni)
Meg szerintettek mennyi árat érdemes mondani?gygabor88, itt egy képernyőkép róla
[ Szerkesztve ]
-
Lacces
őstag
válasz skoda12 #4412 üzenetére
gygabor88. Megvolt, a linuxnak a grafikus megjelenítőjével volt a probléma... a listában semmit sem jelenített meg, de amint csak úgy belekattintottam (semmit nem lehetet látni), akkor megjelent egy kiírás, hogy 1 element selected (vagy valami ilyesmi)... "Selected All", "Deselected All"-nál is jelezte, hogy kijelölt ennyit, vagy nem, de a lista nem volt látható.... egész egyszerűen az a lista nem frissült be....
-
őstag
Sziasztok!
A következő kód windows alatt a megfelelő eredményt adja, linux alatt viszont üres a visszatérési érték(terminalon lefuttatva normálisan működik a parancs):
private static final String PACKAGEGETTERCOMMAND = "Rscript -e \"installed.packages()\"";
...
Runtime r = Runtime.getRuntime();
Process p = r.exec(PACKAGEGETTERCOMMAND);
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = b.readLine()) != null && !line.contains("Version")) {
if (line != "" && line != "\n" && !line.startsWith(" ")) {
installedPackages.add(line.split(" ")[0]);
}Kérdésem, hogy mit kellene linux alatt máshogy csinálni?
[ Szerkesztve ]
Semper fi!
-
PandaMonium
őstag
válasz Oppenheimer #4405 üzenetére
Nem beleduma, csak szólnék, hogy ha nem muszáj vektografikus képeket használni akkor érdemes bitmapokkal dolgozni, sokkal kevesebb fejfájást okoznak az embernek és a betöltési/renderelési idő is jóval alacsonyabb ha ez számít. Csak kíváncsiságból, meg szabad tudni mi a projekt lényege (játék, kisfilm, vagy csak tesztelgetés)?
What I cannot create, I do not understand
-
Lacces
őstag
Hali,
Valaki találkozott az alábbi hibával?
Eclipseben Help -> Install new software, kiválasztom az elérhetők közül az "All ...", de hiába keresek ott a pluginokra, semmi. Semmilyen találatot nem kapok...
Market Place-t néztem, de ott meg hiába töltöm le a cuccot, ha a plugin-t nem tartalmazza. -
caindwan
aktív tag
válasz trisztan94 #4385 üzenetére
Milyen iskolán tanulsz/tanultál?
-
Karma
félisten
válasz Oppenheimer #4405 üzenetére
Nem tudja. Külső libet viszont tolhatsz rá, nekem pl. ezt dobta a Google.
“All nothings are not equal.”
-
Oppenheimer
nagyúr
Köszönöm a választ neked is, meg gygabor88-nak!
Végülis megrajzoltam Adobe Illustratorral őket. Most az a kérdés, hogy az ilyen meseszép SVG fájlokkal tud-e valamit kezdeni a Graphics2D? Lehetőleg úgy, hogyha betöltöm őket és kirajzolom, akkor a fehér háttér ne rondítson bele, hanem az űrhajó a csillagok felett suhanjon. Nézegetem nagyban az Oracle doksiját, de sajnos abból nem tudtam rájönni, elkezdeni meg nem akarom vele úgy, hogy esetleg mégsem tudja.(#4404) trisztan94: Nem sajnos. Csak egy egyszerű játék szoftverlabor házinak.
[ Szerkesztve ]
https://play.google.com/store/apps/details?id=com.lovemap.lovemapandroid
-
trisztan94
őstag
-
skoda12
aktív tag
válasz Oppenheimer #4400 üzenetére
Remlik, hogy apache batikban mintha lett volna erre support.
-
Karma
félisten
válasz Oppenheimer #4401 üzenetére
Hát kelleni nem kell, ha a Path2D osztályt használod.
“All nothings are not equal.”
-
Oppenheimer
nagyúr
válasz Oppenheimer #4400 üzenetére
Hát bizony PS-olnom kell.
https://play.google.com/store/apps/details?id=com.lovemap.lovemapandroid
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
Állásajánlatok
Cég: Axon Labs Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest