こんにちは、Webpack、TypeScript、fileloaderを使ってプロジェクトをセットアップしました。マイwebpack.config.js
pixi.jsのファイルローダー経由でテクスチャをロードする
:
const path = require('path');
module.exports = {
entry: './src/index.ts',
devtool: 'source-map',
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx']
},
module: {
rules: [
{
test: /\.ts$/,
enforce: 'pre',
loader: 'tslint-loader',
options: { /* Loader options go here */ }
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader'
]
},
{
test: /\.tsx?$/,
loader: 'awesome-typescript-loader'
}
]
},
devtool: 'inline-source-map',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
マイtsconfig.json
:
{
"module": "commonjs",
"target": "es6",
"noImplicitAny": true,
"moduleResolution": "node",
"compilerOptions": {
"noImplicitAny": true,
"removeComments": true
},
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
"exclude": [
"node_modules"
]
}
そして、私のindex.ts
:
import * as _ from 'lodash';
import * as PIXI from 'pixi.js';
const renderer = PIXI.autoDetectRenderer(256, 256,
{ antialias: false, transparent: false, resolution: 1 });
document.body.appendChild(renderer.view);
const stage = new PIXI.Container();
renderer.render(stage);
予想通り上記の星座がindex.html
に舞台をレンダリングします。私はこのbs.png
がファイル/dist/14145c56ece7799954586ba6f8464dbb.png
としてロードされることを理解したよう
:
は今、私は今、私のプロジェクトの構造は次のようになり、私のsrc/images/
フォルダにbs.png
ファイルを追加しました。ここで私のトラブルが始まります。私は次のように画像をロードしようとします。私はimport * as Image from './images/bs.png';
を経由して、それをロードindex.ts
で今
declare module "*.png" {
const content: any;
export default content;
}
:まず私はロード.png
ファイル用のモジュール宣言を含むcustom.d.ts
を作成しました。結果のImage
はtype関数であり、console.log(Image)の出力は14145c56ece7799954586ba6f8464dbb.png
です。残念ながら、私はこのようなピクシーテクスチャをロードすることはできませんよ。このラインで
const text = new PIXI.Texture(Image);
私が手に:私は理解して
src/index.ts(12,31): error TS2345: Argument of type 'typeof "*.png"' is not assignable to parameter of type 'BaseTexture'.
Property 'touched' is missing in type 'typeof "*.png"'.
。私も使用できません:
const texture = PIXI.utils.TextureCache[Image];
Imageはファイルパスを返すようですが。 webpackによって作成されたpng
のファイルパスを使用してイメージをロードしようとしましたが、テクスチャはまだundefined
のままです。
実際の問題は本当にわかりません。サーバーを稼働させる必要がありますか(Expressなど)、何か不足していますか?ところでこれはawesome-typescript-loader
を使用してnpm run build
コマンドの出力です:
> webpack
Hash: 45f5667bd75205a328bf
Version: webpack 3.4.1
Time: 3297ms
Asset Size Chunks Chunk Names
14145c56ece7799954586ba6f8464dbb.png 4.07 kB [emitted]
bundle.js 4.83 MB 0 [emitted] [big] main
[16] (webpack)/buildin/global.js 509 bytes {0} [built]
[37] (webpack)/buildin/module.js 517 bytes {0} [built]
[88] ./src/index.ts 851 bytes {0} [built]
[192] ./src/images/bs.png 82 bytes {0} [built]
+ 189 hidden modules
少なくとも、イメージをロードする前に必ずそれを使用することをお勧めします。この例では、TextureCacheからイメージを取得しようとしていますが、実際にキャッシュに追加する場所はわかりません。したがって、少なくともローダーを使用することができます:http://pixijs.download/dev/docs/PIXI.loaders.Loader.html。だから何かのように: loader.add( 'bunny'、 'data/bunny.png');ローダーが です。load((loader、resources)=> {キャッシュ内のイメージからスプライトを作成する}) ... また、テクスチャを作成するときには、おそらく次のものを使用するべきです:コンストラクタの代わりにlet texture = PIXI.Texture.fromImage – Hachi