настоящее ночное небо

5 сентября 2026 г. devlogpixelart

Гора становится мягкой ночью

Был сидеть на этом один на время. Хотел ночную версию сцены заголовка, и пиксель гора что работает нормально в дневном свете выглядела неправильно как только всё затемнело, слишком блочно против неба что предполагалось ощущаться глубоко и далеко.

Так фоновая гора получает обменяна на мягкую версию ночью, прослежена над с того же самого паромного фото я использовал за пиксель один но рисованная как мягкий заполненный форма вместо пикселей. Всё ближе к воде, птицы, рыба, маленький бегун, все остаются пиксель. Только дальний фон смягчается. Даёт это некоторую глубину, близкие вещи острые и блочные, далёкие вещи размытые в темноту как это действительно было бы.

Настоящие созвездия, не случайные точки

Мог просто разбросать случайные звёзды и назвал это сделанным, действительно начал таким образом на несколько часов:

const stars = Array.from({ length: 40 }, () => ({
	x: Math.random() * width,
	y: Math.random() * height
}));

Но я хотел небо действительно быть небом. Посмотрел где Кассиопея и Большая Медведица (Karlsvogna, расширяясь) сидят относительно Полярной звезды и расположил обе созвездия как настоящие схемы точек вместо случайного шума. Они вращаются медленно вокруг Полярной звезды как настоящее небо делает, просто ускорено много так что ты можешь действительно заметить это происходящим во время загрузки страницы вместо над полной ночью.

Маленькая деталь никто не требуется заметить, но я знаю это там и этого достаточно для меня.

Помнить где это было

Последнее что я добавил: сцена теперь помнит грубо где всё было если ты вернёшься в пять минут. Позиции птиц, вращение звёзд, всё это, упало в локальное хранилище с меткой времени:

export const SCENE_MAX_AGE_MS = 5 * 60 * 1000;

export function loadScene<S>(
	storage: StorageLike | null,
	key: string,
	now: number = Date.now(),
	maxAgeMs: number = SCENE_MAX_AGE_MS
): StoredScene<S> | null {
	if (!storage) return null;
	try {
		const raw = storage.getItem(key);
		if (!raw) return null;
		const parsed = JSON.parse(raw);
		if (!parsed || parsed.v !== 1 || typeof parsed.savedAt !== 'number') return null;
		const age = now - parsed.savedAt;
		if (age < 0 || age >= maxAgeMs) return null;
		return parsed as StoredScene<S>;
	} catch {
		return null;
	}
}

Блуждай прочь читать пост и вернись на домашнюю страницу и это не просто переустанавливает на свежую случайную сцену, оно поднимает близко где оно оставило. После пяти минут это отпускает и перетасовывает.

Это дизайн в основном сделан на сейчас. Мох зелёная бумага, гора что действительно выглядит как гора, путь слишком много птиц, боковая панель, и небо что знает где Большая Медведица действительно сидит. Вероятно буду продолжать пощипывать маленькие вещи но это форма это.

0 комментариев

Войдите , чтобы оставить комментарий.

Войти

Забыли пароль?

Нет аккаунта?