Cimo de Alt+Enter

From Viki
Jump to navigation Jump to search
This page is a translated version of the page Alt+Enter Glitch and the translation is 95% complete.
Outdated translations are marked like this.
Other languages:
English • ‎Esperanto

La cimo de Alt+Enter estas cimo en kiu uzado de la "plenekran-baskuliga" klavkombino renversus la ludanton aŭ interrompus komandon walk() dum intersceno. Kvankam la cimo nomiĝas "Alt+Enter", ajna klavkombino kiu baskuligas plenekranan reĝimon, inkluzive Alt+F kaj F11 (en 2.3) produktos la saman efikon.

Pli specife, okazigi tiun cimon rezultos ke la ludo premos AGBUTONON por la ludanto, kiu premadiĝos ĝis la sekva malfruigo en la intersceno. Do, se ri estis staranta sur surfaco, aŭ estis 3 kadroj for de suriĝi al surfaco (Renversiĝa bufrado) kiam la AGBUTONA premo okazis, ri renversiĝos. La komando walk() premos maldekstron aŭ dekstron por la ludanto kaj kreas sian propran malfruigon, do se la cimo okazas dum walk(), la maldekstra kaj dekstra enigoj ambaŭ elteniĝos.

Kondiĉoj

Por ke la cimo efiku, (1) la klavkombino aŭ klavpremo devas okazi dum malfruigo en skripto, kiu daŭras pli ol 1 kadron, kaj (2) la ludanto devas havi regpovon dum la intersceno (game.hascontrol devas esti agordita al vera).

Se la klavkombino estas premita dum oni ne estas en intersceno, ĝi ne renversos la ludanton, sed preventos la ludanton de moviĝi dekstren aŭ malen se tiuj klavoj premadiĝis dum la baskulig-klavkombino estis premita.

Kondiĉo 1 malebligas ajnan malfruigon en intersceno kiu okazas pro uzi untilbars()untilfade() dum interscena stri- aŭ malklariĝ-animacio. Tio estas ĉar tiuj komandoj fakte malfruigas dum 1 kadro ĉiun kadron se la animacio ne estas finita, kaj do, anstataŭ esti 15-kadra malfruigo, ĝi konsistas el dekkvin 1-kadraj malfruigoj.

Kondiĉo 2 malebligas povi fari tiun ĉi cimon dum invitoj "- Premu AGBUTONON por daŭri -" en intersceno, ĉar kutime kiam tiuj invitoj aktiviĝas, la regpovo de la ludanto ankaŭ estas forprenita. Tamen, eblas akiri la inviton dum ankoraŭ havante regpovon (Noflip). Okaze de fari do, la ludanto ne povus renversiĝi, sed ria walk() ankoraŭ povus esti interrompita.

Analizo de kodo

De la komenca enmeto de la deponejo de VVVVVV, linio 276 de main.cpp:

276 		if(key.toggleFullscreen)
277 		{
278 			if(!gameScreen.isWindowed)
279 			{
280 				//SDL_WM_GrabInput(SDL_GRAB_ON);
281 				SDL_ShowCursor(SDL_DISABLE);
282 				SDL_ShowCursor(SDL_ENABLE);
283 			}
284 			else
285 			{
286 				SDL_ShowCursor(SDL_ENABLE);
287 			}
288 
289 
290 			if(game.gamestate == EDITORMODE)
291 			{
292 				SDL_ShowCursor(SDL_ENABLE);
293 			}
294 
295 			gameScreen.toggleFullScreen();
296 			game.fullscreen = !game.fullscreen;
297 			key.toggleFullscreen = false;
298 
299 				key.keymap.clear(); //we lost the input due to a new window.
300 				game.press_left = false;
301 				game.press_right = false;
302 				game.press_action = true;
303 				game.press_map = false;
304 			printf("Error: failed: %s\n", SDL_GetError());
305 
306 
307 
308 
309 		}

Tiuj ĉi kvar linioj kaŭzas la cimon:

300 				game.press_left = false;
301 				game.press_right = false;
302 				game.press_action = true;
303 				game.press_map = false;

game.press_left kaj game.press_right uziĝas kiam ajn la ludanto moviĝas maldekstren aŭ dekstren, kaj ili uziĝas aŭtomate por marŝigi la ludanton (mal)dekstren dum interscenoj. Do, agordi ilin al malvera interrompos la marŝon. Agordi game.press_action al vera renversos la ludanton dum intersceno kvankam ri devus ne povi.

Ŝajnas ke la originala disvolvigisto pensis ke enigoj de la malnova fenestro "restadus" kaj estus premadataj se plenekraneco baskuliĝus, kiel indikite de la komento sur linio 299 ("ni perdis la enigon pro nova fenestro"). Tamen, sufiĉas viŝi la klavmapon, kaj tute nenecesas fari ion ajn pri aliaj enigvariabloj dum baskuligi plenekranecon.

Aldone, "Error: failed: " (Eraro: malsukcesis) ĉiam aperos en la konzolo, malgraŭ manko de eraro pri la baskuligo de plenekraneco. Tiu nenecesa preso foriĝis en 2.3.